[英]avoiding problems with spring cglib proxy
在spring中使用cglib代理会导致:
a)构造函数的双重调用
b)不允许拦截从另一个方法调用的方法
但为什么spring创建一个bean然后代理? 是否可以动态生成扩展指定bean类的类,然后只调用一次构造函数? 这将解决a)和b)公共和受保护的方法。 我错过了什么吗?
好问题。 我认为这是由于Spring引导应用程序上下文的原因:它首先创建所有原始bean,然后应用后处理器,例如添加AOP(包括事务)。 这种分层架构需要先创建普通bean,然后再封装它。 有人可能会认为这种方法遵循构成而不是继承原则。
还要注意a)应该不是问题。 类不应该在构造函数中执行初始化,而是在@PostConstruct
方法中执行 - 只调用一次。 另一方面,这导致了另一个问题:
c)不能使用CGLIB代理的构造函数注入,参见SPR-3150
但我明白你的沮丧。 猜猜唯一有效的解决方法是我们完整的AspectJ编织。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.