본문 바로가기
Spring

[Spring] @Configuration, @Bean 이해하기

by happyhelen 2021. 11. 26.

 

** 공유가 아닌 개인 공부에 목적을 둔 글입니다

** 설명이 불충분할 수 있으며 잘 정리된 글이 아닐 수도 있습니다

 

 

 

@Configuration

클래스단에 붙고, 해당 클래스를 설정정보로 사용한다는 어노테이션이다

 

 

@Bean

메소드에 붙고, 해당 메소드를 스프링 컨테이너에 빈으로 등록한다

 

클래스단에 붙으면 해당 클래스 안의 모든 메소드를 빈으로 등록한다

 

 

 

ApplicationContext 는 스프링 컨테이너로,

 

설정정보를 바탕으로 메소드에서 반환된 객체를 컨테이너 내에서 빈으로 등록하는 역할을 한다

 

BeanDefinition 은 빈 설정 메타정보로,

 

스프링 컨테이너의 구현체인 AnnotationConfigApplicationContext 가 AppConfig 설정정보를 읽고 생성해낸다

 

스프링 컨테이너는 이 메타정보를 갖고 빈을 생성해내서 빈 하나당 이 BeanDefinition 을 갖고 있게 된다

 

 

 

 

위의 내용을 코드로 이해해보자

 

기존의 AppConfig 클래스에 @Configuration 어노테이션을 붙이고, 메소드에 @Bean 어노테이션을 붙여 빈으로 등록

 

 

 

 

스프링을 사용하기 전에는 AppConfig 객체를 직접 생성하고 DI 도 직접 했지만

 

AppConfig 클래스를 AnnotationConfigApplicationContext 에 설정정보로 넘겨주면서 스프링컨테이너를 생성한다

 

빈을 사용할 때도 이 스프링컨테이너를 통해서 찾는다

 

 


 

<<interface>>

BeanFactory

      ↑

<<interface>>

ApplicationContext

     

AnnotationConfigApplicationContext

 

 

스프링컨테이너(ApplicationContext)는 위와 같은 구조로, 

 

BeanFactory 에서 getBean() 을 포함한 대부분의 기능을 제공하지만

 

ApplicationContext 가 다른 인터페이스들을 상속받아 부가기능을 제공하므로 ApplicationContext 을 주로 사용한다