스프링 컨테이너 생성
스프링 빈 등록
@Bean이 붙은 메서드를 호출하여 메서드 이름, 객체를 스프링 빈으로 등록함
스프링 빈의 이름은 전부 다르게 할 것
스프링 빈 의존관계 설정
설정 정보를 참고하여 DI함
단순 자바 코드 호출이 아님 (뒤에서 설명)
getBean, getBeansOfType 등으로 빈을 조회할 수 있음
타입으로 빈 조회 시 같은 타입을 가진 빈이 여러 개이면 오류가 발생함
부모 타입으로 빈 조회 시 해당 타입과 하위 타입을 가진 빈이 모두 검색 대상에 속함
BeanFactory
스프링 컨테이너의 최상위 인터페이스
스프링 빈을 관리하고 조회하는 역할을 담당
ApplicationContext
BeanFactory를 상속받아 모든 기능을 제공함
애플리케이션 개발 시 필요한 추가 기능까지 제공함 (다른 인터페이스들을 다수 상속 )
ApplicationContext의 부가 기능
메시지 소스를 활용한 국제화 기능
환경 변수를 개발 환경에 따라 설정
애플리케이션 이벤트 처리 기능
다양한 리소스 (파일, 클래스 패스 등) 편리하게 조회
BeanFactory, ApplicationContext 모두 스프링 컨테이너라 칭함
ApplicationContext를 대부분 사용한다
어노테이션 기반 자바 코드 설정 사용
지금까지 한거
팩토리 메서드를 이용하여 빈을 등록
XML 설정 사용
래거시 프로젝트들이 사용함
컴파일 없이 빈 설정 정보를 변경할 수 있다.
resources 폴더 하위에 config 파일을 생성함
직접 빈을 등록
스프링 컨테이너는 설정 언어와 상관없이 정의된 BeanDefinition을 참고하여 생성된다.
ApplicationContext의 하위 클래스들은 BeanDefinitionReader를 통해 BeanDefinition을 생성하게 된다.