[ 최종 수정일 : 2023년 10월 08일 ]
@Bean Annotation
스프링에서는 @Configuration를 빈 객체를 관리하는 클래스 레벨에 붙이고, @Bean을 통해 명시적으로 지정된 메서드 레벨의 빈 객체를 생성하도록 합니다.
@Configuration
public class AppConfig {
@Bean
public Mybean myBean() {
return new MyBean();
} // myBean
} // end class
하지만 @Bean은 매번 사용자가 명시적으로 붙여줘야 하는 수고로움이 발생하며 이를 좀 더 간소화하기 위해
@Component라는 어노테이션을 사용하게 되었습니다.
@Componenet Annotation ( + Controller, Service, Repository )
@Component는 @ComponentScan과 함께 사용되며 클래스를 스프링 빈으로 자동 등록하도록 지정합니다.
클래스 레벨에 @Componenet를 붙이게 되면 클래스는 스프링의 컴포넌트 스캔을 통해 스프링 컨테이너의 빈으로 자동 등록됩니다.
단, 지정된 클래스 내의 메서드를 빈으로 오토 와이어링하려면 @Autowried 어노테이션을 사용해야 합니다.
@Component
public class MyComponent {
@Autowired
public String MyBean myBean() {
return new MyBean();
} // myBean
} // end class
@Componenet는 @Controller, @Service, @Repository과 같은 스테레오 타입의 메타 어노테이션으로 등록되어 있습니다.
여기서 스테레오 타입(stereotype)이란 각 레이어(Layer)에 해당하는 컴포넌트를 정의할 때 사용하는 것을 의미합니다.
부제 - @Bean ( +Configuration ) VS @Component (+ Autowired ) ?
사용자의 성향과 개발 환경에 따라 다르겠지만,
@Bean은 일반적으로 빈의 생성과 초기화 과정을 세밀하게 조정하거나 외부 라이브러리들을 빈으로 등록할 때 사용합니다.
@Component는 @ComponentScan과 함께 빈을 간단히 등록하고자 할때 사용되며, 스테레오 타입의 메타 어노테이션으로 등록되어 있습니다.