@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());
}
}