** 공유가 아닌 개인 공부에 목적을 둔 글입니다
** 설명이 불충분할 수 있으며 잘 정리된 글이 아닐 수도 있습니다
@Configuration
클래스단에 붙고, 해당 클래스를 설정정보로 사용한다는 어노테이션이다
@Bean
메소드에 붙고, 해당 메소드를 스프링 컨테이너에 빈으로 등록한다
클래스단에 붙으면 해당 클래스 안의 모든 메소드를 빈으로 등록한다
ApplicationContext 는 스프링 컨테이너로,
설정정보를 바탕으로 메소드에서 반환된 객체를 컨테이너 내에서 빈으로 등록하는 역할을 한다
BeanDefinition 은 빈 설정 메타정보로,
스프링 컨테이너의 구현체인 AnnotationConfigApplicationContext 가 AppConfig 설정정보를 읽고 생성해낸다
스프링 컨테이너는 이 메타정보를 갖고 빈을 생성해내서 빈 하나당 이 BeanDefinition 을 갖고 있게 된다
위의 내용을 코드로 이해해보자
기존의 AppConfig 클래스에 @Configuration 어노테이션을 붙이고, 메소드에 @Bean 어노테이션을 붙여 빈으로 등록
스프링을 사용하기 전에는 AppConfig 객체를 직접 생성하고 DI 도 직접 했지만
AppConfig 클래스를 AnnotationConfigApplicationContext 에 설정정보로 넘겨주면서 스프링컨테이너를 생성한다
빈을 사용할 때도 이 스프링컨테이너를 통해서 찾는다
<<interface>>
BeanFactory
↑
<<interface>>
ApplicationContext
↑
AnnotationConfigApplicationContext
스프링컨테이너(ApplicationContext)는 위와 같은 구조로,
BeanFactory 에서 getBean() 을 포함한 대부분의 기능을 제공하지만
ApplicationContext 가 다른 인터페이스들을 상속받아 부가기능을 제공하므로 ApplicationContext 을 주로 사용한다
'Spring' 카테고리의 다른 글
[Spring] @ComponentScan 과 @Autowired (0) | 2021.11.29 |
---|---|
[Spring] 싱글톤 컨테이너와 @Configuration (0) | 2021.11.28 |
[Spring] DI : Dependency Injection (0) | 2021.08.28 |
[Spring] Optional <T> (0) | 2021.08.26 |
[Spring] 정적컨텐츠, MVC와 템플릿엔진, API (0) | 2021.08.23 |