ApplicationContext는 스프링 컨테이너 -> 인터페이스
애노테이션으로도 만들수도 있고, XML 기반으로 만들수도 있음(
근데 잘 안씀)
일반적으로 ApplicationContext를 스프링 컨테이너라고 한다.
빈 이름은 항상 다르게 하자
3. 스프링 빈 의존관계 설정 - 준비
//1번
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
//2번
Object bean = ac.getBean(beanDefinitionName);
//3번
if(beanDefinition.getRole()==beanDefinition.ROLE_APPLICATION){
ac.getBean(beanDefinitionName);
}
}
1번 : 스프링 내부 빈까지 싹다 조회
2번 : 특정 bean 조회
ac.getBean(이름,타입 정보)
ac.getBeansOfType(타입 정보) -> 그 타입의 모든 빈 조회
특징
3번 : ROLE_APPLICATION 내가 애플리케이션을 개발하기 위해 등록한 빈들 조회
3-1번 : ROLE_INFRASTRUCTURE : 스프링 내부에서 사용하는 빈
BeanFactory
스프링 컨테이너의 최상위 인터페이스 -> 스프링 빈을 관리하고 조회하는 역할
ApplicationContext
BeanFactory + 수많은 부가기능
예시) 메시지소스를 활용한 국제화 기능 -> 언어 설정
환경변수 -> 개발환경, 테스트환경, 운영환경 등등 설정 편하게
애플리케이션 이벤트 - 이벤트를 발행하고 구독하는 모델을 편리하게 지원한다.
편리한 리소스 조회 - 파일 등에서 리소스를 편리하게 조회
어노테이션기반의 자바 코드면 annotated BeanDefinitionReader가 자바코드를 설정정보로 읽어서 beanDefinition을 생성한다 xml으로 설정되어있으면 xml로 등록정보를 읽어서 beandefinition으로 만들고 즉 beanDefinition에 이제 bean의 메타데이터들을 추상화 한다.
- BeanClassName: 생성할 빈의 클래스 명(자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)
- factoryBeanName: 팩토리 역할의 빈을 사용할 경우 이름, 예) appConfig
- factoryMethodName: 빈을 생성할 팩토리 메서드 지정, 예) memberService
- Scope: 싱글톤(기본값)
- lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때 까지 최대한 생성을 지연처리 하는지 여부
- InitMethodName: 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명
- DestroyMethodName: 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명
- Constructor arguments, Properties: 의존관계 주입에서 사용한다. (자바 설정 처럼 팩토리 역할의
빈을 사용하면 없음)
스프링컨테이너는 beanDefinition에서 bean을 생성하는데 필요한 정보들을 바탕으로 bean을 생성하게 된다.