@Component vs @Bean 차이
항목 | @Component | @Bean |
사용 위치 | 클래스 위 | 메서드 위 |
작성 대상 | 직접 만든 클래스 | 외부 라이브러리 객체 등 (내가 new로 만드는 객체) |
자동 등록 | 자동 스캔(@ComponentScan) 대상 | 수동 등록 |
용도 | 일반적으로 직접 만든 유틸, 서비스, DAO 등에 사용 | 외부 라이브러리 객체를 스프링 컨테이너에 등록할 때 사용 |
@Component 예시
@Component
public class MyService {
// 스프링이 자동으로 Bean 등록해줌
}
클래스 위에 작성함
내가 만든 클래스의 경우에는 @Component를 사용해서 바로 빈으로 등록하면 된다.
@Bean 예시
@Configuration
public class AppConfig {
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); // 직접 new 해서 등록
}
}
메서드 위에 작성하며 @Configuration 안에 사용.
BCryptPasswordEncoder의 경우에는 가져다 쓰는 라이브러리이기 때문에 @Bean으로 등록해준다.
@Configuration은 "이 클래스 안에 있는 @Bean 메서드들을 다 빈으로 등록해달라"는 뜻의 어노테이션이고,
@Bean을 붙인 메서드들을 빈으로 등록하게 된다.
둘 다 스프링 컨테이너에 "Bean"으로 등록한다는 공통점이 있다.
+) 클래스 내부가 모두 static 메서드로 이루어져 있으면 @Component 어노테이션이 필요없다.
왜냐하면 new를 하지도, 의존성을 주입하지도 않으니까.
즉, 스프링이 관리해줄 필요가 없어서 @Component가 필요없는 것이다.
보통 Util 클래스에는 @Component 어노테이션을 사용하지 않는다.
'웹 개발' 카테고리의 다른 글
[Spring Boot] @Primary와 @Qualifier의 차이 (0) | 2025.05.22 |
---|---|
[Backend] 비밀번호 암호화 (0) | 2025.05.19 |
[Front] 기능 (0) | 2025.05.17 |
[Front] 코드 분석 중 궁금한/모르는 점 정리 (0) | 2025.05.16 |
[Backend] API와 컨트롤러 (0) | 2025.05.15 |