IoC 컨테이너에 빈으로 등록이 되어야 의존성 주입을 할 수 있습니다.
먼저, 여러가지 의존성 주입 방법이 있지만 @Autowired를 통해서 주입하는 것을 알아보겠습니다.
@Autowired
필요한 의존 객체의 타입에 해당하는 빈을 찾아 주입합니다. 즉, IoC컨테이너 안에 등록되어 있는 빈에서 객체를 찾아 의존성 주입을 해줍니다.
Bean
스프링 IoC컨테이너가 관리하는 객체이다.
- 장점
1) 의존성 관리가 용이
2) 빈으로 등록된 객체는 기본적으로 스코프가 "싱글톤"으로 정해짐
3) 라이프사이클 인터페이스를 지원해준다.
- BeanFactory
스프링 IoC컨테이너의 가장 최상위 인터페이스이다.
- ApplicationContext
BeanFactory를 포함한 다른 컨테이너를 상속받는다.
- Bean 설정 방법 1
1) spring-boot-starter-web 의존성 설정
2) @Component 어노테이션을 클래스에 붙쳐준다. ( 자동으로 빈이 등록됨 )
3) @Autowired 어노테이션을 통해 의존성 주입을 해준다.
- Bean 설정 방법 2 ( Java Config )
1) Config 파일에 @Configuration 어노테이션을 붙쳐준다.
2) @Bean을 통해 직접 빈을 등록해준다.
3) @Autowired를 통해 등록되어 있는
정리
예제 코드를 보면
- @Bean은 Spring에 BookingService를 제공 ( 등록 )
- @Autowired는 이를 사용 ( 의존성 주입 )
@SpringBootApplication
public class Application {
@Autowired
BookingService bookingService;
@Bean
BookingService bookingService() {
return new BookingService();
}
public static void main(String[] args) {
bookingService.book("Alice", "Bob", "Carol");
}
}