@Configuration(ProxyBeanMethods=true) 其中true和false的区别?

在Spring框架中,@Configuration注解用于定义配置类,这些配置类可以替代传统的XML配置文件,用于声明bean的定义、组件的扫描等。@Configuration注解中的proxyBeanMethods属性是一个在Spring 5.2及以后版本中引入的重要属性,用于控制配置类中定义的bean方法的调用方式。

proxyBeanMethods=true(默认值)

当proxyBeanMethods设置为true时(这也是Spring 5.2及以后版本的默认值),Spring容器会为每个@Configuration注解的配置类创建一个CGLIB代理。这样做的目的是确保配置类中的bean方法是线程安全的,并且支持方法间的依赖注入。具体来说,当你从同一个配置类中调用另一个@bean方法时,Spring不会直接调用那个方法,而是通过代理来调用,这样可以确保每次调用都返回一个新的bean实例(对于单例bean来说,实际上是返回同一个bean的引用,但由于是通过代理调用的,所以能确保线程安全)。@Bean注解创建的bean默认是单例的,

proxyBeanMethods=false

当proxyBeanMethods设置为false时,Spring容器不会为配置类创建CGLIB代理。这意味着,直接从配置类中调用其他bean方法时,将直接调用那些方法,而不是通过代理。这样做有几个好处:

性能提升:由于没有代理的开销,配置类的处理速度会更快。
减少内存占用:因为不需要为每个配置类创建代理对象,所以可以减少内存的占用。
限制:但是,这也意味着在同一个配置类中直接调用其他bean方法时,将不会触发Spring的依赖注入逻辑。这可能会在某些情况下导致问题,特别是当bean之间存在复杂的依赖关系时。
在这里插入图片描述

选择true还是false?
如果你在一个配置类中不经常调用其他bean方法,或者你的应用对性能有较高要求,并且你确信配置类中的bean方法调用不会导致依赖注入问题,那么可以考虑将proxyBeanMethods设置为false。
默认情况下(true),Spring通过代理机制确保了配置类中的bean方法是线程安全的,并且支持方法间的依赖注入,这是更安全和通用的选择。

总之,proxyBeanMethods的设置取决于你的具体需求和对Spring框架的理解。在大多数情况下,保持默认设置(true)是比较稳妥的选择。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值