@Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다.
(예를 들면 Redis와 연동하기위해 RedisConfig 클래스에 @Component를 선언할수는 없으니 RedisTemplate의 인스턴스를 생성하는 redisTemplate메소드를 만들고 해당 메소드에 @Bean을 선언하여 Bean으로 등록한다.)
@Bean
public ServerProperties serverProperties() {
return new ServerProperties();
}
반대로 개발자가 직접 컨트롤이 가능한 Class들의 경우엔 @Component를 사용한다.
그럼 개발자가 생성한 클래스에 @Bean은 선언이 가능할까?
정답은 No 이다.
@Bean과 @Component는 각자 선언할 수 있는 타입이 정해져있어 해당 용도외에는 컴파일 에러를 발생시킨다.