@Component vs @Bean

.·2021년 8월 19일
0

@Component를 사용하면 Componenet Scan으로 쉽게 빈으로 등록 가능하고,
@Bean을 사용하면 Configuration 클래스에서 스프링 빈으로 객체를 등록하고 싶을 때 직접 생성해서 등록한다고 알고 있었다.
@Component@Bean 모두 스프링 빈으로 등록된다.

두 개의 annotation은 정확히 무슨 차이가 있을까?

Declaration

우선 컴포넌트와 빈 어노테이션 Declaration을 살펴보았다.
@Target: 선언할 수 있는 타입

  1. @Component
    • ElementType.TYPE: Class, interface (including annotaion type), or enum declaration
      : 클래스인터페이스에서만 사용 가능
  1. @Bean
    • ElementType.TYPE: Method declaration
      ElementType.ANNOTATION_TYPE: Annotation type declaration
      : 메소드에 사용 가능

Usage example

  1. @Component
    • 직접 컨트롤이 가능한 Class들의 경우
  1. @Bean
    • 개발자가 생성한 class에는 직접 @Bean을 사용할 수 없다.
      아래와 같이 직접 생성한 MemberRepository 클래스에 @Bean을 붙였을 경우 사용 불가능한 타입이라고 에러가 뜬다.

    • 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우

참고

0개의 댓글