@Configuration public class ApplicationConfig{ @Bean public BookRepository bookRepository() { return new BookRepository(); }
@Bean public BookService bookService(){ BookService bookService = new BookService(); bookService.setBookRepository(bookRepository()); return bookService; }
위 메소드는 아래 메소드와 동일 @Bean public BookService bookService(BookRepository bookRepository){ BookService bookService = new BookService(); bookService.setBookRepository(bookRepository); return bookService; }
두번째 것을 아래 메소드로 할 경우 BookService내 bookRepository에 Autowired를 넣어주면 주입이 된다. //생성자로 주입받아야 할 경우에는 Autowired로 어떻게 할 수 가 없다. @Bean public BookService bookService(){ return new BookService(); } }
자바로 할 땐 오히려 xml보다 불편한다 다른 편한방법없나? 있다 ComponentScan 어노테이션
좀더 편하게 자바로 빈생성할래 @ComponentScan
1 2 3 4 5 6 7
@Configuration @ComponentScan(basePackageClasses = XXX.class) //XXX 클래스가 위치한 곳부터 스캐닝을 함 public class ApplicationConfig{
}
@SpringBootApplication
위의 과정을 하나의 어노테이션으로 해결해주는 어노테이션이 바로 @SpringBootApplication 이다.
위의 두 경우(java로 빈생성) AnnotationConfigApplicationContext 클래스를 통해 ApplicationContext 인스턴스를 생성한다.