▲원하는 결과
■BookDTO.java
package sample11;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Setter
@Getter
@AllArgsConstructor
@Component
@NoArgsConstructor
@Scope("prototype")
public class BookDTO {
private String subject;
private String writer;
private int price;
private String date;
}
일단 bookDTO를 만든다.
여기서 @NoArgsConstructor를 안 쓰는 바람에 읽어올 수 없어서 좀 헤맸다.
Scope은 prototype으로, bean을 요청할 때마다 bean 객체를 생성한다.
scope으로 singleton 설정을 할 수 있다.
■BookDAOImpl.java
package sample11;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class BookDAOImpl implements BookDAO {
@Autowired
private DbUtil dbUtil;
@Override
public void save(EmailSender emailSender, MessageSender messagSender, BookDTO book1, BookDTO book2) {
System.out.println("emailSender = " + emailSender);
System.out.println("messagSender = " + messagSender);
System.out.println("book1 = " + book1);
System.out.println("book2 = " + book2);
System.out.println("dbUtil = " + dbUtil);
}
}
DaoImpl은 save 메소드를 가지고 있다.
원하는 결과 콘솔에 사용되는 메소드이다.
DbUtil을 Autowired로 선언 및 주입한다.
■BookServiceImpl.java
package sample11;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDAO bookDao;
@Autowired
private MessageSender messageSender;
@Autowired
private EmailSender emailSender;
@Override
public void save(BookDTO book1, BookDTO book2) {
bookDao.save(emailSender, messageSender, book1, book2);
}
}
■ MessageSender/DbUtil/EmailSender.java
package sample11;
import org.springframework.stereotype.Component;
@Component
public class MessageSender {
}
이 세가지는 클래스 명만 다르고 메소드는 없다.
@Component 선언으로 bean 객체 하나를 만든다.
■ BookController.java
package sample11;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller("controller")
public class BookController {
@Autowired
private BookService bookService;
@Autowired
private BookDTO book1;
@Autowired
private BookDTO book2;
public void invoker() {
bookService.save(book1, book2);
}
}
controller로 선언하고, bookservice에 book1과 book2를 보내 DAO에 있는 save 메소드를 호출하게 만든다.
■ MainApp.java
package sample11;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("sample11/applicationContext.xml");
//controller의 invoker를 호출해본다!
BookController controller = context.getBean("controller" , BookController.class);
controller.invoker();
}
}
xml에는 이 한줄만 추가하면 끝!
<context:component-scan base-package="exam.service,exam.aop" />
<!-- aop 설정 java base -->
<aop:aspectj-autoproxy />
'Programming > Spring' 카테고리의 다른 글
[Spring] Spring을 시작하기 위한 환경 설정(Chapter 1) (0) | 2024.02.03 |
---|---|
[Spring] Transaction (0) | 2023.06.16 |
[Spring] MVC 구조 (0) | 2023.06.16 |
[Spring] 두번째 개념 정리 (0) | 2023.06.16 |
[Spring] 시작 (0) | 2023.06.16 |