Spring Framework 에서 자바 기반의 설정을 통해 Bean 을 정의하는 데 사용됨.
이 어노테이션을 사용하면 메서드를 통해 Spring IoC 컨테이너에 Bean을 등록할 수 있음
@Bean
어노테이션이 붙은 메서드는 Spring 컨테이너에 의해 호출되며 반환된 객체를 빈으로 등록.@Bean 어노테이션을 사용하여 두 개의 빈을 정의하는 예시
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService();
}
@Bean
public AnotherService anotherService() {
return new AnotherService();
}
}
@Configuration
클래스 AppConfig
내에 @Bean
메서드를 사용하여 MyService
와 AnotherService
두 개의 빈을 정의myService()
메서드는 MyService
객체를 반환하며, 이 객체는 Spring IoC 컨테이너에 의해 관리됨anotherService()
메서드는 AnotherService
객체를 반환하며, 역시 Spring IoC 컨테이너에 의해 관리됨@Bean
어노테이션이 붙은 메서드의 이름이 빈의 이름이 됨.myService
메서드에서 반환된 빈은 myService
라는 이름으로 컨테이너에 등록됨@Bean
메서드로 생성된 빈은 싱글턴임. 즉, 애플리케이션 컨텍스트 내에서 한 번만 생성되며, 모든 요청에서 동일한 인스턴스가 제공. 싱글턴이 아닌 빈이 필요하다면, @Scope
어노테이션을 사용할 수 있음@Bean
메서드는 다른 빈에 대한 의존성을 주입받을 수 있음. 메서드 매개변수로 다른 빈을 주입받으면, Spring 은 이 빈을 자동으로 주입@Bean
public MyService myService(AnotherService anotherService) {
return new MyService(anotherService);
}
@Bean
메서드는 빈으로 등록할 객체를 반한해야 함. 반환 타입은 객체의 타입에 따라 결정됨@Bean
으로 등록된 빈은 Spring의 IoC 컨테이너에 의해 생성되고 관리되며, 다른 빈과의 의존성 주입이나 라이프사이클 관리를 제공받음