둘 다 Bean을 생성 및 등록할 때 사용하는 어노테이션이다.
기능은 동일한데 왜 2가지로 나뉘어져 있는지 차이점을 알아보자.
결론부터 얘기하자면, @Bean
은 개발자가 직접 제어할 수 없는 외부 라이브러리를 Bean으로 등록하고 싶을 때 사용한다. 반대로, 개발자가 직접 제어할 수 있을 때는 @Component
를 사용한다.
각 어노테이션이 어떻게 사용되는지 보자.
@Configuration
public class AppConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
}
@Configuration
이 명시된 클래스 안에 작성해야 한다.@Component
public class Paging {
...
}
@ComponentScan
의 스캔 대상으로 지정되어 Bean 등록이 자동으로 이루어진다.외부 라이브러리는 개발자가 임의로 클래스에 @Component
를 명시할 수 없기 때문에 @Bean
을 사용해야 한다.
되도록 @Component
를 사용하되 사용할 수 없을 때는 @Bean
을 사용하자.
기억보단 기록을 - @Bean vs @Component
망나니개발자 - [Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2)