@Bean과 @Component는 둘 다 Spring Framework에서 빈(bean)을 등록하는 데 사용되지만, 그 사용 방식과 목적이 다릅니다. 각 어노테이션의 차이를 구체적으로 설명드리겠습니다.
@Bean@Bean은 Java Config 스타일에서 사용되며, 직접 빈을 정의하는 방식입니다.@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl(); // 빈으로 등록
}
}
위 코드에서 myService() 메소드는 MyServiceImpl 객체를 생성하고 이를 Spring의 빈으로 등록합니다.
@Component@Component 어노테이션이 붙은 클래스를 스캔하여 빈으로 등록합니다. 이 외에도 @Service, @Repository, @Controller 등의 어노테이션이 @Component의 특성을 확장한 것입니다.@Component
public class MyServiceImpl implements MyService {
// 구현 내용
}
위 코드에서 MyServiceImpl 클래스는 자동으로 Spring 컨테이너에 빈으로 등록됩니다. 별도로 @Configuration이나 @Bean을 사용하지 않고, 클래스가 스캔 대상에 포함되면 자동으로 빈이 등록됩니다.
| 특성 | @Bean | @Component |
|---|---|---|
| 적용 위치 | 메소드 레벨 | 클래스 레벨 |
| 주용도 | 외부 라이브러리나, 세부 설정이 필요한 빈 등록 | 클래스 자동 등록 |
| 등록 방식 | 수동으로 객체를 생성하고 반환하여 빈 등록 | Spring이 클래스 스캔을 통해 자동 등록 |
| 유연성 | 더 세밀한 제어가 가능 | 자동 빈 등록으로 간단하고 빠름 |
@Bean은 주로 Java Config 방식에서 메소드를 통해 빈을 정의하고 세밀하게 제어할 수 있을 때 사용됩니다. 외부 라이브러리 객체나 설정이 필요한 경우에 유용합니다.@Component는 자동 빈 등록을 위해 사용되며, 일반적으로 Spring이 제공하는 자동 스캔 기능을 통해 빈을 등록하고 관리합니다. 코드에서 어노테이션을 추가하는 것만으로 빈을 등록할 수 있어, 편리하고 간단합니다.따라서, @Bean과 @Component는 사용 목적과 등록 방식이 다르므로, 상황에 따라 적절히 선택하여 사용하는 것이 좋습니다.