为什么基于纯继承的代理在AoP中是不好的

时间:2012-01-19 19:53:53

标签: aop spring.net proxy-classes

我在同一个类中的方法之间进行方法调用并且应用了事务建议时遇到了问题。

Spring Framework .NET文档声明它支持基于组合和继承的代理,并且您可以强制spring创建基于继承的代理(没有目标的代理)进行实例化。

但事实证明,即使是“基于继承的代理”也不是他们所声称的。它们确实继承了目标类而不是它的接口,但它们仍然使用目标对象。这导致了在同一类建议中的方法之间的调用未被应用的事实。

不可否认,Spring使用InheritanceBasedAopConfigurer可以通过一些努力来实现这一目标,但您仍然需要列出要应用它的对象以及要应用于它们的建议。

为什么Spring跳过篮球以避免基于真正继承的代理?我错过了哪种反模式?

1 个答案:

答案 0 :(得分:3)

我可以看到多种原因:

1)实施更复杂。 IoC容器管理实例,并且要应用基于纯继承的代理,您需要处理该类型。这就是'InheritanceBasedAopConfigurer'所做的:它在容器初始化之前改变了类型。

2)如果您希望AOP工作,您需要将您的方法标记为虚拟。这不直观。

3)基于组合的代理通过界面强制设计,这是一种很好的实践。