Spring/Spring

ApplicationContext와 Spring Bean

작은돼지 2023. 1. 28. 22:01

스프링 컨테이너 동작 순서

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="이름")으로 이름을 부여해줄 수 있다.