본문 바로가기
Java & 스프링

[Spring] @Bean vs @Component 무엇이 다를까?

by hjhello423 2020. 12. 25.

스프링을 이용하여 개발을 하면 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에 대한 추가 옵션(커스터마이징)을 한 뒤 사용할 때 많이 사용합니다.

 


참조

반응형

댓글