为何在Spring配置类上使用@Configuration(proxyBeanMethods = false)?
关于
@Configuration(proxyBeanMethods = false)的使用原因 在Spring Boot配置类中使用@Configuration(proxyBeanMethods = false),核心原因主要有两点:
1. 性能优化
当proxyBeanMethods设为false时,Spring不会为该配置类生成CGLIB代理。默认情况下(proxyBeanMethods=true),Spring会创建代理类来保证每次调用配置类中的@Bean方法时,返回的都是同一个单例Bean。但如果你的配置类没有通过内部调用@Bean方法来复用Bean实例(比如示例代码里,所有@Bean方法都是直接创建新对象,没有依赖本类其他@Bean的调用),那么代理就完全没有存在的必要。关闭代理能减少类加载的开销,降低应用启动时间和内存占用,在大型项目中这种优化的收益会更显著。
2. 明确代码语义
设置proxyBeanMethods=false是一种语义化声明,告诉Spring和其他开发者:这个配置类是纯粹的Bean定义容器,内部的@Bean方法之间没有依赖关系,不需要Spring维护它们的单例一致性。这让代码的意图更清晰,避免后续开发者误操作(比如在配置类内部调用@Bean方法时产生预期外的行为)。
回到你提供的示例代码:MyJmsConfiguration的myFactory方法既没有调用本类其他@Bean方法,也不存在外部通过调用该类@Bean方法获取Bean的场景,完全符合关闭代理模式的适用条件。
内容的提问来源于stack exchange,提问作者joe_specimen
相关产品推荐
相关产品推荐

