@Bean 을 이용한 수동 빈 메소드는 스프링 빈 안에만 구현되어 있으면 모두 동작한다. 하지만 @Bean 은 반드시 @Configuration 어노테이션이 붙은 객체 내에서만 등록해야 한다.

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

https://mangkyu.tistory.com/234