빈(Bean)이란?
빈(Bean)은 스프링 컨테이너가 관리되는 재사용 소프트웨어 컴포넌트입니다.
- 빈은 인스턴스화된 객체를 의미합니다.
- 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 합니다.
- @Bean이 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록합니다.
- 빈은 클래스 등록정보, getter/setter 메서드를 포함합니다.
- 빈은 컨테이너에 사용되는 설정 메타데이터로 생성됩니다.
- 설정 메타 데이터
- XML 또는 자바 애너테이션, 자바 코드로 표현합니다.
- 컨테이너의 명령과 인스턴스화, 설정, 조립할 객체를 정의합니다.
빈 접근 방법
- ApplicationContext를 사용하여 빈 정의를 읽고 액세스 할 수 있습니다.
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
PetStoreService service = context.getBean("memberRepository", memberRepository.class);
List<String> userList = service.getUsernameList();
위의 코드 예제를 보도록 하겠습니다.
- getBean을 사용하여 빈의 인스턴스를 가져올 수 있습니다.
- ApllicationContext 인터페이스는 빈을 가져오는 몇 가지 방법들이 있습니다.
BeanDefinition
스프링은 다양한 설정 형식을 BeanDefinition이라는 추상화 덕분에 지원할 수 있습니다.
- 빈은 BeanDefinition(빈 설정 메타정보)으로 정의되고 BeanDefinition에 따라서 활용하는 방법이 달라집니다.
- BeanDefinition(빈 설정 메타정보)
- 속성에 따라 컨테이너가 빈을 어떻게 생성하고 관리할지 결정합니다.
- @Bean이나 <bean> 당 각 1개씩 메타 정보가 생성됩니다.
- Spring이 설정 메타 정보를 BeanDefinition 인터페이스를 통해 관리하기 때문에 컨테이너 설정을 XML, Java로 할 수 있습니다.
BeanDefinition 개체가 포함하고 있는 메타데이터
- 패키지 수식 클래스 이름: 일반적으로 정의되는 빈의 실제 구현 클래스입니다.
- 빈 동작 구성 요소: 컨테이너에서 빈이 어떻게 동작해야 하는지 설명합니다.
- 빈이 작업을 수행하는 데 필요한 다른 빈에 대한 참조입니다.
- 새로 만든 개체를 설정할 기 타 구성 설정입니다.
- 메타데이터는 각 빈 정의를 구성하는 속성 집합으로 변환됩니다.
property | Explaind in ... |
Class | 링크 |
Name | 링크 |
Scope | 링크 |
Constructor arguments | 링크 |
Properties | 링크 |
Autowiring mode | 링크 |
Lazy initialization mode | 링크 |
Initialization method | 링크 |
Destruction method | 링크 |
- BeanClassName: 생성할 빈의 클래스 명입니다.
- factoryBeanName: 팩토리 역할의 빈을 사용할 경우의 이름입니다
- factoryMethodName: 빈을 생성할 팩토리 메서드를 지정합니다.
- scope: 싱글톤(기본 값)
- lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때까지 최대한 생성을 지연처리 하는지 여부를 확인합니다.
- InitMethodName: 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명을 지정합니다.
- DestoryMethodName: 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명입니다.
- Constructor arguments, Properties: 의존관계 주입에서 사용됩니다.
'Spring' 카테고리의 다른 글
[Spring] 싱글톤(Singleton) (0) | 2023.04.06 |
---|---|
[Spring] 빈 스코프(Bean Scope) (0) | 2023.04.05 |
[Spring] 스프링 컨테이너(Spring Container) (0) | 2023.04.03 |
[Spring] DI(Dependency Injection)란? (0) | 2023.04.02 |
[Spring] 간단한 서비스 생성 및 테스트 (0) | 2023.04.01 |