프레임워크/Spring

#2 Spring Bean

Scala0114 2022. 4. 22. 20:27

1. Bean 이란?

  • Spring에서 사용되는 POJO(Plain Old Java Object)의 일종
  • Spring의 IoC 컨테이너가 관리하는 자바 객체
  • Bean으로 등록한 객체는 IoC 컨테이너가 의존성을 주입해줄 수 있음
  • @Controller, @Service, @Repository, @Component 등의 어노테이션이 붙은 클래스는 자동으로 Bean으로 등록
  • @Configuration의 경우 내부에서 @Component를 사용

 

 

2. 특정 객체를 Bean으로 등록하는 방법

    • @Component - 클래스를 Bean으로 등록
      @Component
      public class MyBeanClass {
      
      	...
          
      }
      • @SpringBootApplication내의 @ComponentScan이 처리될 때 자동으로 대상 클래스들을 Bean으로 등록
      • 클래스 레벨의 어노테이션이기 때문에 클래스에만 사용 가능

    • @Bean - 메소드의 반환 객체를 Bean으로 등록
      @Configuration
      public class SpringConfiguration {
      	@Bean
          public MyBeanClass myBeanClass {
          	return new MyBeanClass();
          }
      }
      • @Configuration 어노테이션이 붙은 설정 클래스에서 @Bean 어노테이션을 사용하여 Bean 등록 가능
      • @Configuration 클래스를 Component Scanning 하면서 @Bean 메소드의 반환값들이 Bean으로 등록됨
      • 특정 객체를 반환하는 메소드에 @Bean을 붙이면 반환되는 인스턴스가 Bean으로 등록

  • @Component vs @Bean
    • @Component는 클래스 레벨에서, @Bean은 메소드 레벨에서 사용되는 어노테이션
    • @Bean은 @Configuration 클래스 내에서 사용해야만 Bean 등록이 가능

    • @Bean을 사용해야하는 경우?
      • 외부 라이브러리 등에 정의된 객체이기에 클래스에 직접 @Component를 사용할 수 없을 경우
      • 동적인 조건에 따라 특정한 구현체를 Bean으로 등록하도록 할 경우
      • @Bean 등록을 명시적으로 하고싶을 경우