我在同一类中的方法之间进行方法调用并应用事务建议时遇到问题。
Spring Framework .NET 文档声明它支持基于组合和继承的代理,并且您可以强制 Spring 创建要实例化的基于继承的代理(没有目标的代理)。
然而,事实证明即使是“基于继承的代理”也不是他们所声称的那样。他们确实继承了目标类而不是它的接口(interface),但他们仍然使用目标对象。这导致了这样一个事实,即在同一类建议的方法之间的调用不适用。
诚然,Spring 可以使用 InheritanceBasedAopConfigurer
做一些努力来做到这一点,但您仍然必须列出要应用它的对象和要应用到它们的建议。
为什么 Spring 会千方百计避免真正基于继承的代理?我缺少什么反模式?
最佳答案
我可以看到多种原因:
1) 实现更复杂。 IoC 容器管理实例,要应用基于纯继承的代理,您需要处理类型。这就是“InheritanceBasedAopConfigurer”的作用:它在容器初始化之前更改类型。
2) 如果您希望 AOP 工作,您需要将您的方法标记为虚拟方法。这不直观。
3) 基于组合的代理强制通过接口(interface)进行设计,这是一种很好的做法。
关于aop - 为什么基于纯继承的代理在 AoP 中不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8932396/