@Bean의 정체는?
Bean이란?
(복습) Bean : 스프링 컨테이너라는 공장이 미리 만들어 놓은 객체
보통 @Autowired를 통해서 공장에서 객체로 주입될 준비를 한다.
그런데…가끔씩 @Bean이라는 키워드가 등장하기도 한다. 이건 왜 필요한 걸까?
자동 빈 주입
그렇다. 보통 스프링에서는 보통 자동 빈 등록을 많이 사용한다.
이를 위해 @Component, @Service, @Repository, @Controller와 같은 어노테이션을 클래스에 붙이고, 스프링 컨테이너는 이걸 보고 이 클래스를 빈으로 자동 등록한다.
이 과정은 컴포넌트 스캔을 통해 이루어지며, 스프링이 프로젝트의 클래스 경로를 스캔해 어노테이션이 붙은 클래스를 자동으로 빈으로 등록하고 관리한다.
java
@Component
public class MyComponent {
// 안의 객체는 빈으로 자동 등록됨
}
수동 빈 주입
그런데, 가끔씩은 직접 객체르
@Bean은 프로그래밍적으로 빈을 직접 정의할 때 사용됩니다. 자동 빈 등록과는 달리, 특정한 커스터마이징이 필요하거나 외부 라이브러리의 클래스와 같은 경우, 직접 빈을 등록해야 할 때 사용됩니다. 예를 들어, 외부 라이브러리에서 제공하는 클래스를 빈으로 등록해야 할 경우, 해당 클래스에 @Component를 붙일 수 없으므로 @Bean을 사용합니다.
java
@Configuration
public class AppConfig {
@Bean
public SomeExternalService someExternalService() {
// 외부 라이브러리의 객체를 직접 빈으로 등록
return new SomeExternalService();
}
}
언제 수동으로 등록?
보통 @Bean을 사용하는 클래스들은 설정(Configuration) 클래스에 위치합니다. 이 클래스들에 붙는 @Configuration 어노테이션은 스프링 설정 파일로, 스프링 컨테이너에 빈을 등록하는 역할을 합니다.