ApplicationContext와 Spring Bean
스프링 컨테이너 동작 순서
1) 스프링 컨테이너 생성
ApplicationContext ac = new AnnotationConfigApplicationContext(구성클래스.class);
// 파라미터로 설정 정보를 줌
ApplicationContext는 인터페이스이다. 구현체로는 어노테이션, XML, Java Config 기반 등이 있음
AnnotationConfigApplicationContext 등
2) Spring Bean 생성 단계
스프링 컨테이너의 Bean 저장소에 Bean 이름 : Bean 객체를 등록 // @Bean이 붙은 메서드를 전부 호출 -> new로 반환된 객체
3) Bean 의존관계 주입 단계(DI)
구성 정보를 참고해서 의존 관계를 설정한다.
4) Bean 관리
생명주기 관리 등
스프링 컨테이너에 등록된 Bean 조회
getBean(빈이름, 타입)
getBean(타입)
부모 타입으로 조회하면 자식 타입도 같이 조회됨. 그래서 Object 타입으로 조회 시 모든 스프링 빈을 반환함
등록된 모든 Bean 조회
ac.getBeanDefinitionNames() --> String[]
Application Bean만 조회
if문을 사용하여 getBeanDefinition(beanDefinitionName)을 사용하여 Bean 메타정보를 가져온 후
~.getRole() == BeanDefinition.ROLE_APPLICATION으로 필터링 (INFRASTUCTURE: 스프링이 내부에서 사용하는 Bean)
부모 타입으로 Bean을 조회하면 하위 타입들이 같이 조회됨
Object 타입으로 Bean을 조회하면 모든 Bean이 조회됨
@Configuration 구성 정보 어노테이션
@Bean 스프링 빈으로 등록, 빈의 기본 이름은 메서드명
ApplicationContext ac = new AnnotationConfigApplicationContext(구성클래스.class);
타입 참조변수 = ac.getBean("빈 이름", 타입.class);
*Bean 이름은 기본적으로 메서드 이름을 사용하므로 중복되지 않아야 함
-> 충돌이 발생하면 @Bean(name="이름")으로 이름을 부여해줄 수 있다.