-
[Spring Core] 공식문서 공부 - 1.3 Bean OverviewJAVA/Spring 2022. 8. 21. 18:04
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-definition
Core Technologies
In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do
docs.spring.io
이번 글에서는 Bean의 정의에 대하여 다룬다.
Spring IoC 컨테이너는 한개 이상의 Bean들을 관리한다.
IoC 컨테이너가 관리하는 Bean들은 앞서 XML 기반 파일에서 <Bean /> 태그에 Bean 정의를 작성한 것과 같이
IoC 컨테이너로 전달한 구성 메타데이터(configuration metadata)에 기반하여 생성된다.
Spring Ioc 컨테이너의 내부에서는, 이러한 Bean들의 정의가 BeanDefinition 객체로 표현되며, 이 객체는 아래와 같은 메타데이터를 포함하고있다.
더보기
Figure 1. BeanDefinition 인터페이스 - A package-qualified class name: 정의된 Bean의 실제로 구현된 클래스
- Bean behavioral configuration elements: 스코프, 생명주기 콜백과 같이 Bean이 컨테이너 내에서 어떻게 행동해야 하는지에 대한 정보
- 해당 Bean이 작동하기 위해 필요한 다른 Bean들에 대한 참조(reference). 협력자(collaborator) 또는 의존성(dependencies)이라고 부르기도 한다.
- 새로 생성되는 Bean들을 위한 구성(configuration) 설정들
이 메타데이터들은 bean 정의에 필요한 프로퍼티(property)들의 집합으로 변환되며, 해당 프로퍼티들의 목록은 아래와 같다.
프로퍼티 설명되어있는 곳 (공식 API 하이퍼링크) Class Instantiating Beans Name Naming Beans Scope Bean Scopes Constructor Arguments Dependency Injection Properties Dependency Injection Autowiring mode Autowiring Collaborators Lazy initialization mode Lazy-initialized Beans Initialization mode Initialization Callbacks Destruction mode Destruction Callbacks table 1. The Bean Definitions
ApplicationContext의 구현체들은 IoC 컨테이너 밖에서 생성된 객체들을 컨테이너에 등록하는 것을 허용한다.
위의 내용은 ApplicationContext의 BeanFactory에 접근하는 getBeanFactory() 메소드를 통해서 구현할 수 있다.
getBeanFactory() 메소드는 DefaultListableBeanFactory 인터페이스의 구현체를 리턴하며,
리턴된 구현체의 registerSingleton(), registerBeanDefinition() 메소드를 통해 IoC 컨테이너 밖에서 생성된 객체들을 컨테이너에 등록할 수 있다.
보통의 어플리케이션은 표준 Bean 정의 메타데이터(e.g. table 1)에 의해 정의된 Bean들에서만 작동한다고 한다.
'JAVA > Spring' 카테고리의 다른 글
[Spring Core] 공식문서 공부 - 1.3.2 Instantiating Bean (0) 2022.08.22 [Spring Core] 공식문서 공부 - 1.3.1 Naming Beans (0) 2022.08.21 [Spring Core] 공식문서 공부 - 1.2.3 Using the Container (0) 2022.08.21 [Spring Core] 공식문서 공부 - 1.2.2 Instantiating a Container (0) 2022.08.21 [Spring Core] 공식문서 공부 - 1.2.1 Configuration Metadata (0) 2022.08.21