일반적으로 스프링 컨테이너가 관리하는 모든 대상을 “빈”이라고 부르지만,
어노테이션 이름으로서의 @Bean과는 의미의 범위가 다름
메서드 레벨에 붙는 어노테이션
@Configuration
public class AppConfig {
@Bean
public EmailService emailService() {
return new GmailService();
//return new NavermailService();
//return new HanmailService();
}
}
클래스 레벨에 붙는 어노테이션
@Component
public class JsonSerializer {
// 내부 로직...
}
스프링 컨테이너에 의해 관리되는 대상으로 등록하고 싶지만 서비스나 컨트롤러와는 별개로 동작할 때 붙임
유틸리티 클래스이지만 정적 메서드로 구성하고 싶지 않거나, 내부에 추가 의존성이 있을 때 주입받기 위해 이런 방식 사용
@Controller, @Service, @Repository 등은 모두 기본적으로 @Component를 포함하고 있음