在查看 springs 自动配置源代码时,似乎每个自动配置类都设置了proxyBeanMethods = false.
@Configuration(proxyBeanMethods=false)
public class SomeAutoConfiguration {
...
}
Run Code Online (Sandbox Code Playgroud)
javadoc 给出了这个特定字段的详细解释:
指定 {@code @Bean} 方法是否应该被代理以强制执行 bean 生命周期行为,例如,即使在用户代码中直接调用 {@code @Bean} 方法的情况下也返回共享的单例 bean 实例。(...) 如果这不是必需的,因为每个特定配置的 {@code @Bean} 方法都是自包含的并且设计为容器使用的普通工厂方法,请将此标志切换为 {@code false} 以便避免 CGLIB 子类处理。(...)
读完这篇文章后,我仍然很困惑,什么时候最好将它设置为 false。
以下是我的问题:
更新:
在 github 上发现了两个问题,它们解释了为什么它出现false在大多数自动配置类上: