加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 避免spring cglib代理的问题

发布时间:2020-12-15 01:35:03 所属栏目:大数据 来源:网络整理
导读:在spring中使用cglib代理会导致: a)构造函数的双重调用 b)不允许拦截从另一个方法调用的方法 但为什么spring创建一个bean然后代理?是否可以动态生成扩展指定bean类的类,然后只调用一次构造函数?这将解决a)和b)公共和受保护的方法.我错过了什么吗? 最佳答

在spring中使用cglib代理会导致:

a)构造函数的双重调用

b)不允许拦截从另一个方法调用的方法

但为什么spring创建一个bean然后代理?是否可以动态生成扩展指定bean类的类,然后只调用一次构造函数?这将解决a)和b)公共和受保护的方法.我错过了什么吗?

最佳答案
好问题.我认为这是由于Spring引导应用程序上下文的原因:它首先创建所有原始bean然后应用后处理器,例如添加AOP(包括交易).这种分层架构需要先创建普通bean,然后再封装它.有人可能会认为这种方法遵循构成而不是继承原则.

还要注意a)应该不是问题.类不应该在构造函数中执行初始化,而是在@PostConstruct方法中执行 – 只调用一次.另一方面,这导致了另一个问题:

c)不能使用CGLIB代理的构造函数注入,参见SPR-3150

但我明白你的沮丧.猜猜唯一有效的解决方法是我们完整的AspectJ编织.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读