@Configuration
public class MyConfig {
@Bean
public ServiceA aService(){
return new ServiceA();
}
@Bean
public ServiceB bService(){
return new ServiceB(aService());
}
}
ServiceB
는 ServiceA
를 의존성으로 갖고 있음.@Configuration
@Bean
을 사용하는 클래스의 경우 반드시 @Configuration
을 활용.빈(Bean)
으로 관리하라는 의미.@Configuration
이 사용된 클래스는 CGLIB 프록시를 기반으로 빈(Bean)
을 싱글톤으로 유지함.이 점이 @Component와의 가장 큰 차이점.
싱글톤 빈(Bean)
이 생성됨.빈(Bean)
을 반환해줌.@Component
빈(Bean)
으로 등록하고자 하는 경우 @Component
를 활용.컴포넌트(Component)
라는 의미.빈(Bean)
등록해줌.@Component
의 기능을 @Configuration(proxyEnabled = false)
로 동일하게 설정할 수 있음.
(이러한 방식을 Bean 경량 모드 처리(bean light mode processing)라고 부르기도 함)
- | @Component | @Configuration |
---|---|---|
목적 및 역할 | - 일반 빈(Bean) 등록용 클래스. - 일반적인 컴포넌트. - 클래스 자체만 빈으로 등록됨. | - 빈(Bean) 등록 및 설정용 클래스. - 설정 클래스(여러 Bean을 정의하는 클래스) 등록. - @Bean 메서드를 통해 여러 빈을 등록 가능. |
빈(Bean) 생성 방식 | - 클래스 자체를 빈(Bean)으로 등록. | - @Bean 메서드를 통해 빈(Bean) 등록. |
프록시 사용 | - 사용 X. | - CGLIB 프록시 사용 (싱글톤 보장). |
중복 호출 시 | - 새로운 객체를 반환할 수 있음. | - 같은 객체를 반환함. (싱글톤 유지) |