[Spring] @Bean vs @Component

hyozkim·2020년 2월 15일
1

Spring으로 개발을 하다보면 @Bean과 @Component를 언제 써야할지 헷갈릴때가 있다.

어떤 교육 프로그램 사전 질문으로 @Component 어노테이션에 대한 설명을 적는 란에 구글링을 해서 개발자가 직접 컨트롤이 가능한 Bean을 적어 제출했었다.

개발자가 직접 컨트롤이 가능한 Bean과 아닌 것의 차이를 정리하고자 한다.

@Bean 텍스트

  • 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다.
  • 구현체가 있어야 한다. (interface)

(예를 들면 ObjectMapper의 경우 ObjectMapper Class에 @Component를 선언할수는 없으니 ObjectMapper의 인스턴스를 생성하는 메소드를 만들고 해당 메소드에 @Bean을 선언하여 Bean으로 등록한다.)

@Component

  • 개발자가 직접 컨트롤이 가능한 Class들의 경우엔 @Component를 사용한다.
  • @Autowired 가능

그럼 개발자가 생성한 Class에 @Bean은 선언이 가능할까?

정답은 No 이다.
@Bean과 @Component는 각자 선언할 수 있는 타입이 정해져있어 해당 용도외에는 컴파일 에러를 발생시킨다. (@Target 확인)

기억보단 기록을을 참고하여 작성하였습니다.

profile
차근차근 develog

0개의 댓글