본문 바로가기
Programming/Spring

[Spring] Annotation, lombok 활용

▲원하는 결과

■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