Spring/Spring 이론
Spring Container - BeanFactory / ApplicationContext / Bean (스프링컨테이너 / 빈 / bean 수동등록 / bean 자동등록)
디깅
2022. 8. 25. 11:14
728x90
Spring Container 에는 두가지가 있다.
1. BeanFactory
2. ApplicationContext
1. BeanFactory
- 빈을 등록/생성/조회 등 빈을 관리한다.
- @Bean 을 붙히면 BeanFactory에 빈 이름 / 빈 객체 가 저장된다.
- getBean()을 통해 빈을 인스턴스화 한다.
- getBean()이 호출된 시점에서야 해당 빈을 생성
2.ApplicationContext
- 빈을 등록/생성/조회 등 빈을 관리할 수 있다.
- BeanFactory을 상속받고 + 여러가지 컨테이너 기능이 추가된다.
- Context초기화 시점에 모든 싱글톤 빈을 미리 로드 - 애플리케이션 가동 후에는 빈을 지연없이 받을 수 있다
Spring Container는 객체의 인스턴스를 싱글톤 관리한다. (= 싱글톤 컨테이너)
→ AppConfig클래스를 통해 만든 빈 목록의 빈들은 같은 빈을 여러번 불러도 주소 자체는 같다.
싱글톤을 보장받으려면 @Configuration을 적용해야 한다.
@Bean 만 적용하면 싱글톤을 보장하지 못한다.
등록하는 방법
- @Configuraton 설정클래스로 설정
- @Bean 빈 등록(메소드 이름이 빈 이름으로 설정된다)
스프링컨테이너는 @Configuraton가 붙은 클래스를 자동으로 빈으로 등록
해당 클래스를 파싱해서 @Bean 이 있는 메소드를 찾아서 빈을 생성해준다.
수동 등록이 필요한 경우는 대부분 아래와 같은 이유이다.
- 개발자가 직접 제어가 불가능한 라이브러리를 활용할 때
- 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때
- 다형성을 활용하여 여러 구현체를 등록해주어야 할 때
빈을 자동으로 등록하도록 할 수 있다.
빈으로 등록할 클래스에 @Component 붙여주고
설정 파일에 @Configuration 과 @ComponentScan 을 붙여줍니다.
(@ComponentScan 이 @Component 붙은 모든 객체를 찾아서 빈으로 등록한다.)
@Component 를 갖는 annotation (@ComponentScan 의 대상)
@Controller
@Service
@Repository
@Configuration
반응형