: 스프링 빈이란 스프링 컨테이너가 관리하고 있는 객체이다. 단지 new
를 통해서 생성한 객체는 스프링 빈이라고 할 수 없고, xml, annotation 등을 통해 ApplicationContext
의 getBean()
을 통해서 가져올 수 있다면 그것이 바로 스프링 빈이다.
@Bean
을 붙여서 스프링 컨테이너가 Component Scan
을 통해서 스프링 빈으로 등록할 수 있도록 함.ApplicationContext
(=Spring Container) 의 객체를 통해서 등록된 스프링 빈에게 접근할 수 있다.: BeanFactory는 스프링 컨테이너 중 최상위 인터페이스 이다.
: 스프링 빈을 관리하고 조회가 가능하며, getBean()
메소드를 제공한다.
: ApplicationContext 는 BeanFactory 를 상속 받고 있고, 그 외에 부가적인 기능들을 더 가지고 있다. (ex. 환경 변수 처리, 편리한 리소스 조회, 어플리케이션 이벤트 지원 등)
-> BeanDefinition
이라는 추상화를 통해서 설정하기 때문이다.
-> 여기서도 역할과 구현, 추상화와 구체화를 나누는 것이 적용된다.
-> 스프링 컨테이너는 BeanDefinition
만 알고 있으면, xml 이 되었든 자바 코드가 되었든 어떠한 설정 방법이든 상관 없이 빈을 등록하여 사용, 관리할 수 있다.
-> xml, 자바 코드, 어노테이션 모두 각각의 Reader 를 통해서 객체 정보가 담긴BeanDefinition을 만들어내기 때문에 스프링은 모든 설정 형식에 대한 지원이 가능하다.
직접 사용하는 경우는 흔치 않다고 하지만, 그래도 도움이 되는 내용이니 숙지하고 넘어가자.