스프링에서 관리하는 객체를 스프링 빈이라고 한다.
@Controller, @Service이 붙은 클래스도 스프링 빈이라고 하는데, 스프링 빈으로 등록하기 위해서는 @Component어노테이션을 붙여줘야 한다.
그런데 Config같은 설정 클래스에서 스프링 컨테이너에 빈을 등록할 때는 @Bean을 사용하는데, 그럼 @Component와 @Bean은 무슨 차이가 있는걸까?
| Component | Bean | |
|---|---|---|
| 사용처 | 클래스 레벨에서 선언 | 메서드 레벨에서 선언 |
| 적용 난이도 | 클래스에 어노테이션만 붙이면 됨 | Bean을 생성하기 위해서는 코드를 전부 작성해야 함 |
| Autowiring | 필드,setter,생성자 주입 가능 | 메서드를 호출하거나 파라미터명을 통해 호출 가능 |
| 빈 생성자 | Spring에서 관리 컴포넌트 스캔에 의해 등록되고 주입됨 | 개발자가 직접 비즈니스 로직을 작성하고 빈을 반환 |
| Recommended for | 내가 작성한 코드를 빈으로 등록할 때 대부분의 경우 @Component가 권장됨 | 1: 특정 비즈니스 로직을 생성할때 2: 제3자 라이브러리 bean을 인스턴스화 할 때 |