@Bean vs @Component
스프링 코어 강의를 보던중 스프링에서 자바 클래스를 빈(Bean) 객체로 등록하기 위해 사용하는 두 가지 어노테이션이 있다고 했다. @Bean과 @Component 어노테이션인데, 강의에서는 어노테이션 사용법만 알려주고 두 어노테이션의 차이점을 알려주지 않아서 차이점을 알아보기로 했다.
@Bean
@Configuration
public class TestConfig {
@Bean
public ArrayList<Integer> listBean() {
return new ArrayList<Integer>();
}
}
@Component
@Configuration
@ComponentScan(basePackages = "com.springex.college")
public class TestConfig {
}
@Component
public class College {
}
차이점
- @Component
- 컴포넌트 스캔을 통해 자동으로 빈이 탐색되고 등록된다.
- @Component 어노테이션이 선언된 클래스와 빈 사이의 묵시적인 매핑이 있다
- @Bean
- 자동으로 빈 설정을 해주는 @Component 어노테이션과 달리 빈을 명시적으로 선언한다.
- 클래스 정의와 빈 설정을 분리하기 때문에 개발자가 빈 객체를 생성하고 설정하는것을 선택할 수 있다.
- @Component 어노테이션을 사용할 수 없는 클래스(개발자가 통제할 수 없는 외부 라이브러리 등)에 사용한다.
- 상황에 따라 구현 클래스를 변경해야 할 때 사용(Repository를 다른 Repository로 변경 할 때)
참고
'Spring' 카테고리의 다른 글
관리자 마케팅 알람 페이지의 조회 지연 및 OOM 문제 해결 후기 (0) | 2025.05.11 |
---|---|
요금/재고 동기화 병목 문제를 스프링 스케줄링 개선으로 해결한 후기 (0) | 2025.05.10 |
QueryDSL fetchOne() OOM 문제 분석 및 해결 후기 (0) | 2025.05.08 |