@Bean vs @Component

stoph·2022년 10월 7일
0

둘 다 Bean을 생성 및 등록할 때 사용하는 어노테이션이다.
기능은 동일한데 왜 2가지로 나뉘어져 있는지 차이점을 알아보자.

결론부터 얘기하자면, @Bean은 개발자가 직접 제어할 수 없는 외부 라이브러리를 Bean으로 등록하고 싶을 때 사용한다. 반대로, 개발자가 직접 제어할 수 있을 때는 @Component를 사용한다.

각 어노테이션이 어떻게 사용되는지 보자.

@Bean

@Configuration
public class AppConfig {
	
    @Bean
    public ObjectMapper objectMapper() {
    	return new ObjectMapper();
    }
    
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
    	return new BCryptPasswordEncoder();
    }
}
  • 한 클래스 안에 등록하고자 하는 Bean을 여러 개 작성할 수 있다.
  • 반드시 @Configuration이 명시된 클래스 안에 작성해야 한다.
  • 메서드 레벨에만 명시할 수 있다.

@Component

@Component
public class Paging {
	...
}
  • @ComponentScan의 스캔 대상으로 지정되어 Bean 등록이 자동으로 이루어진다.
  • 클래스 레벨에만 명시할 수 있다.

결론

외부 라이브러리는 개발자가 임의로 클래스에 @Component를 명시할 수 없기 때문에 @Bean을 사용해야 한다.

되도록 @Component를 사용하되 사용할 수 없을 때는 @Bean을 사용하자.


참고

기억보단 기록을 - @Bean vs @Component
망나니개발자 - [Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2)

0개의 댓글