Digking's cave

Spring Container - BeanFactory / ApplicationContext / Bean (스프링컨테이너 / 빈 / bean 수동등록 / bean 자동등록) 본문

Spring/Spring 이론

Spring Container - BeanFactory / ApplicationContext / Bean (스프링컨테이너 / 빈 / bean 수동등록 / bean 자동등록)

디깅 2022. 8. 25. 11:14
728x90

Spring Container 에는 두가지가 있다.

1. BeanFactory

2. ApplicationContext

 

1. BeanFactory

  • 빈을 등록/생성/조회 등 빈을 관리한다.
  • @Bean 을 붙히면 BeanFactory에 빈 이름 / 빈 객체 가 저장된다.
  • getBean()을 통해 빈을 인스턴스화 한다.
  • getBean()이 호출된 시점에서야 해당 빈을 생성

 

2.ApplicationContext

  • 빈을 등록/생성/조회 등 빈을 관리할 수 있다.
  • BeanFactory을 상속받고 + 여러가지 컨테이너 기능이 추가된다.
  • Context초기화 시점에 모든 싱글톤 빈을 미리 로드 - 애플리케이션 가동 후에는 빈을 지연없이 받을 수 있다

Spring Container는 객체의 인스턴스를 싱글톤 관리한다. (= 싱글톤 컨테이너)

→ AppConfig클래스를 통해 만든 빈 목록의 빈들은 같은 빈을 여러번 불러도 주소 자체는 같다.

 

싱글톤을 보장받으려면 @Configuration을 적용해야 한다.

@Bean 만 적용하면 싱글톤을 보장하지 못한다.

 

등록하는 방법

  1. @Configuraton  설정클래스로 설정
  2. @Bean 빈 등록(메소드 이름이 빈 이름으로 설정된다)

스프링컨테이너는 @Configuraton가 붙은 클래스를 자동으로 빈으로 등록

해당 클래스를 파싱해서 @Bean 이 있는 메소드를 찾아서 빈을 생성해준다.

 

수동 등록이 필요한 경우는 대부분 아래와 같은 이유이다.

  • 개발자가 직접 제어가 불가능한 라이브러리를 활용할 때
  • 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때
  • 다형성을 활용하여 여러 구현체를 등록해주어야 할 때

빈을 자동으로 등록하도록 할 수 있다.

 

빈으로 등록할 클래스에 @Component 붙여주고 

설정 파일에 @Configuration 과 @ComponentScan 을 붙여줍니다.

(@ComponentScan 이 @Component 붙은 모든 객체를 찾아서 빈으로 등록한다.)

 

@Component 를 갖는 annotation (@ComponentScan 의 대상)

@Controller

@Service

@Repository

@Configuration

반응형