스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
- ApplicationContex를 스프링 컨테이너라고 한다.
- ApplicationContext는 인터페이스다.
- 스프링 컨테이너는 XML을 기반으로 만들 수 있고 애노테이션 기반의 자바 설정 클래스도로 만들 수 있다.
- AppConfig를 사용하는 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만드는 방법이다.
스프링 컨테이너 생성 과정
1. 스프링 컨테이너 생성
- new AnnotationConfigApplicationContext(AppConfig.class)
- 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다.
- 여기서는 AppConfig.class를 구성정보로 지정했다.
2. 스프링 빈 등록
- 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록한다.
3. 스프링 빈 의존관계 설정 - 준비
4. 스프링 빈 의존관계 설정 - 완료
- 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)한다.
스프링 빈 조회하기
모든 빈 출력하기
- ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름이 조회된다.
- ac.getBean() : 빈 이름으로 빈 객체(인스턴스)를 조회한다.
애플리케이션 빈 출력하기
- 스프링이 내부에서 사용하는 빈은 getRole()로 구분할 수 있다.
- ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
- ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
스프링 빈 조회 - 기본
- ac.getBean(빈이름, 타입)
- ac.getBean(타입)
- 조회 대상이 스프링 빈에 없으면 예외 발생
- NoSuchBeanDefinitionException
스프링 빈 조회 - 동일한 타입이 둘 이상
- 타입으로 조회 시 같은 타입의 스프링 빈이 둘 이상이면 오류가 발생한다. 이 때는 빈 이름을 지정하자.
- ac.getBeansOfType()을 사용하면 해당 타입의 모든 빈을 조회할 수 있다.
스프링 빈 조회 - 상속 관계
- 부모 타입으로 조회하면 자식 타입도 함께 조회한다.
- 그래서 모든 자바 객체의 최고 부모인 Object 타입으로 조회하면 모든 스프링 빈을 조회한다.