Spring 에서 (boot 포함) component와 bean의 차이는?
Spring Boot (정확히는 Spring Framework)에서 @Component와 @Bean은 모두 Spring 컨테이너에 객체(빈, Bean)를 등록하는 데 사용되지만, 사용하는 방식과 목적이 조금 다릅니다.
🔹 1. @Component
- 클래스에 붙이는 어노테이션
- Spring이 자동으로 해당 클래스를 빈으로 등록
@ComponentScan에 의해 탐지되어 등록됨
@Component
public class MyComponent {
public void doSomething() {
System.out.println("Component is working");
}
}
✅ 특징
- 자동 등록
@Service,@Repository,@Controller도 사실@Component의 특수화 버전- 패키지 스캔 경로 안에 있어야 함
🔹 2. @Bean
- 메서드에 붙이는 어노테이션
- 주로
@Configuration클래스 안에서 사용 - 개발자가 직접 객체를 생성하고 그 결과를 Spring 컨테이너에 등록
@Configuration
public class AppConfig {
@Bean
public MyComponent myComponent() {
return new MyComponent(); // 수동 등록
}
}
✅ 특징
- 수동 등록
- 외부 라이브러리 객체, 설정값이 필요한 경우 등 유연한 객체 생성 가능
- 메서드 이름이 빈 이름이 됨 (필요시
@Bean(name = "beanName")으로 지정 가능)
📌 정리
| 항목 | @Component |
@Bean |
|---|---|---|
| 붙이는 위치 | 클래스 | 메서드 |
| 등록 방식 | 자동 등록 (컴포넌트 스캔) | 수동 등록 (개발자가 명시적으로 생성) |
| 사용 용도 | 애플리케이션 내부 클래스 | 외부 라이브러리, 복잡한 초기화 |
| 설정 클래스 필요 여부 | 필요 없음 | @Configuration 필요 |
🙋 언제 써야 할까?
- 내가 만든 클래스를 빈으로 등록하고 싶다면 →
@Component - 외부 라이브러리 객체나 조건에 따라 달라지는 객체 생성이 필요할 때 →
@Bean