@Bean
을 이용한 수동 빈 메소드는 스프링 빈 안에만 구현되어 있으면 모두 동작한다. 하지만 @Bean
은 반드시 @Configuration
어노테이션이 붙은 객체 내에서만 등록해야 한다.
@Configuration
어노테이션 안에는 @Component
어노테이션이 붙어있어서 @Configuration
이 붙어있는 클래스 역시 스프링의 빈으로 등록된다. 그럼에도 불구하고 @Configuration
이 따로 있는 이유는 CGLib 으로 프록시 패턴을 적용해 수동으로 등록하는 스프링 빈의 생성 방식을 설정할 수 있기 때문이다.
등록하려는 빈 객체
public class YukongResource {
// 구현
}
@Configuration
안에는 proxyBeanMethods
라는 이름의 메소드가 있다. 이 메소드는 @Bean
메소드를 이용해 등록한 빈을 싱글톤으로 생성할 것인지 설정하는 메소드이며, 기본적으로 true
를 가진다.
proxyBeanMethods
의 값을 false
로 설정하면 호출될 때마다 새로운 스프링 빈 객체가 생성되어 호출된다.
@Configuration(proxyBeanMethods = false)
public class MyBeanConfiguration {
@Bean
public YukongResource yukongResource() {
return new YukongResource();
}
@Bean
public MyFirstBean myFirstBean() {
return new MyFirstBean(yukongResource());
}
@Bean
public MySecondBean mySecondBean() {
return new MySecondBean(yukongResource());
}
}