스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트
빈(bean)은 인스턴스화된 객체를 의미
스프링 컨테이너에 등록된 객체를 스프링 빈이라고 함
@Bean이 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록
빈은 클래스의 등록정보, 게터/세터 메서드를 포함
빈은 컨테이너에 사용되는 설정 메타데이터로 생성됨
// create and configure beans ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml"); // retrieve configured instance PetStoreService service = context.getBean("memberRepository", memberRepository.class); // use configured instance List<String> userList = service.getUsernameList();
getBean 을 사용하여 bean의 인스턴스를 가져올 수 있다.
ApplicationContext 인터페이스는 bean을 가져오는 몇 가지 방법들이 있다.
실제적으로 응용 프로그램 코드에서는 getBean() 메서드로 호출하여 사용하면 안됨!!!
스프링은 다양한 설정 형식을 BeanDefinition이라는 추상화 덕분에 지원할 수 있다.
Bean은 BeanDefinition(빈 설정 메타정보)으로 정의되고 BeanDefinition에 따라서 활용하는 방법이 달라지게 됨.
핵심 포인트
소프트웨어 개발 용어의 관점에서 컨테이너란 내부에 또 다른 컴포넌트를 가지고 있는 어떤 컴포넌트를 의미
컨테이너는 먼저 객체를 생성하고 객체를 서로 연결함
객체를 설정하는 단계를 지나 마지막으로 생명주기 전반을 관리
컨테이너는 객체의 의존성을 확인해 생성한 뒤 적절한 객체에 의존성을 주입
스프링은 스프링 컨테이너를 통해 객체를 관리
스프링 컨테이너에서 관리되는 객체를 빈(Bean)이라고 함
property
- Class
- Name
- Scope
- Constructor arguments
- Properties
- Autowiring mode
- Lazy initialization mode
- Initialization method
- Destruction method
BeanClassName : 생성할 빈의 클래스 명(자바 설정처럼 팩토리 역할의 빈을 사용하면 없음)
factoryBeanName : 팩토리 역할의 빈을 사용할 경우 이름, 예) appConfig
factoryMethodName : 빈을 생성할 팩토리 메서드 지정, 예) userService
Scope : 싱글톤(기본값)
lazyInit : 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때까지 최대한 생성을 지연처리 하는지 여부
InitMethodName : 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명
DestoryMethodName : 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명
Constructor arguments, Properties : 의존관계 주입에서 사용한다. (자바 설정처럼 팩터리 역할의 빈을 사용하면 없음)