Java Spring如何在配置bean上应用代理?

Java Spring如何在配置bean上应用代理?,java,spring,spring-bean,Java,Spring,Spring Bean,正如我们所知,@Configuration类中的所有@Bean方法都将被代理,因此当它是单例时,foo()将只被调用一次 @Configuration public class SomeConfig{ @Bean public Foo foo() { return new Foo(); } @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public Bar bar() { return new Bar(foo())

正如我们所知,@Configuration类中的所有@Bean方法都将被代理,因此当它是单例时,
foo()
将只被调用一次

@Configuration
public class SomeConfig{

@Bean
public Foo foo() {
    return new Foo();
}

@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public Bar bar() {
    return new Bar(foo()); // foo() will be invoked only once.
}

}
那个代理机制是由SpringAOP驱动的吗?我怀疑没有,因为SpringAOP是基于代理的(CGLIB),而且它有,而
foo
没有。它都不是基于AspectJ的,因为
SomeConfig
没有接口

那么Spring如何在配置bean上应用代理呢?这被重定向是什么意思?谢谢

在常见场景中,@Bean方法将在@Configuration类中声明,以确保始终使用“full”模式,并且跨方法引用将因此重定向到容器的生命周期管理。这将防止通过常规Java调用意外调用相同的@Bean方法,这有助于减少在“lite”模式下操作时难以追踪的细微错误


是的,它是基于代理的,是的,它由Spring供电。它很早就被处理,并通过ASM进行处理,ASM还用于用cglib代理它。允许普通代理无法完成的所有操作。