스프링을 이용하여 개발을 하면 instance를 bean으로 등록하고, 등록된 bean을 자주 사용하게 됩니다.
그런데 bean으로 등록하는 방법을 여려가지가 있는데요. 그중에 @Bean을 이용하는 방법과 @Componnt를 이용하는 방법이 흔히 사용됩니다.
그런데 이 두 방법은 어떤 차이가 있을까요?
@Bean?
우선 @Bean에 대해 살펴보겠습니다.
위의 사지은 Bean interface의 코드를 캡처한 사진입니다.
우선 @Target부분을 살펴보면 적용 가능한 부분이 메서드 선언 부분과, 어노테이션 선언 부분입니다. @Target의 ElementType에 관한 설명은 링크를 참조해 주세요.
@Component
이번엔 @Compontnt를 살펴보겠습니다.
TYPE에 선언 가능하다고 정의되어 있는데 TYPE은 class, interface에 적용 가능합니다.
따라서 class, interface, enum과 다른 annotation의 선언부에 사용 가능하겠네요.
둘 다 컨테이너에 bean으로 등록해 주는 공통점을 가지고 있지만, 선언 가능한 부분이 다른 차이점을 가직고 있습니다.
지금까지의 경험으로는 @Bean은 보통 @Configuration 선언된 class에서 자주 사용했던 것 같습니다.
ObjectMapper, DataSource, RestTemplate 같이 이미 만들어져 있는 instance를 생성하고 해당 instance에 대한 추가 옵션(커스터마이징)을 한 뒤 사용할 때 많이 사용합니다.
참조
반응형
'Java & 스프링' 카테고리의 다른 글
Spring의 Jackson은 어떻게 동작할까? with ObjectMapper (0) | 2020.12.27 |
---|---|
[Spring] 트랜잭션 전파 알아보기, @Transaction, propagation (0) | 2020.12.15 |
[Spring] 스프링의 DI를 알아보자 (Dependency Injection) (0) | 2020.12.12 |
[Spring] auto DI, 생성자 주입 방식(Construct Injection) (0) | 2020.01.29 |
[spring] AOP를 이용하여 controller의 input data 자동 로그 기록하기 (0) | 2019.12.27 |
댓글