자바 객체의 생명주기를 관리한다.
스프링 컨테이너에서 자바 객체를 관리함으로서 각각의 객체들은 생명과 소멸 객체간의 연결에 대한 책임에서 벗어나게 된다.
스프링 컨테이너에서 관리되는 자바 객체
ApplicationContext는 BeanFactory의 빈 관리 기능을 상속받았다.
그 외에도 이미지 파일 자원, 국제화 텍스트 관리 등의 기능이 있으므로 ApplicationContext를 사용하자.
빈을 관리할 객체(보통 AppConfig)에 @Configuration을 사용하여 역할을 명시한 후 @Bean을 메소드에 붙여 빈 등록을 한다.
사실 스테레오타입 애노테이션을 이용하면 이 코드양을 상당수 줄일 수 있다.
스테레오타입(고정관념)이란 특정 요소를 도메인에 맞게 분류하는 것.
@Component, @Controller, @Service, @Configuration, @Repository 등이 있다.
- @Primary 사용
이 애노테이션을 사용하면 주입 우선순위가 높아진다.- @Qualifier 사용
Qualifier을 통해 객체가 사용되는 상황을 명시하고, 추상체가 사용될 때 이를 명시하게되면 상황에 맞는 의존관계가 주입된다.- @ComponentScan을 통한 패키지 범위제한 or 예외처리
ComponentScan의 basePakages 혹은 basePackageClasses를 통해 빈 탐색범위를 제한할 수 있다.
혹은 includeFilters, excludeFilters를 사용하여 특정 조건을 만족하는 클래스를 스캔 혹은 제외시킬 수 있다.
총 6개의 빈 스콥이 있으며 기본적으로 싱글톤이다.
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
- 생성
- @PostConstruct
- InitializingBean(Interface)
- @Bean의 initMethod
- 소멸
- @PreDestroy
- DisposableBean(interface)
- @Bean의 destroyMethod