春季 AOP 1.3.2 中是否有重大更改
本文关键字:是否 AOP 春季 | 更新日期: 2023-09-27 18:35:42
我正在开发一个广泛使用Spring AOP的应用程序。 该应用程序是用 .NET 2.0 编写的,但我正在尝试将其升级到 .NET 4.0。 这意味着从Spring 1.2.0升级到1.3.2,但是,这似乎导致了一些问题。
这是我现在在尝试访问默认页面时收到的错误。
Error thrown by a dependency of object 'IType1' defined in 'file [C:'svn'Application.Web'Configs'ImmutableDefinitions.xml] line 55' : Unsatisfied dependency expressed through constructor argument with index 0 of type [Application.Logic.Process.OrderBlo] : Error thrown by a dependency of object 'OrderBlo' defined in 'file [C:'svn'Application.Web'Configs'Order_Logic.xml] line 10' : Initialization of object failed : Cannot instantiate Type [Application.Interceptors.ActivityMonitorInterceptor] using ctor [Void .ctor(Application.Logic.ActivityMonitorBlo)] : 'Unable to cast object of type 'CompositionAopProxy_fe703921758d417f8e6a2d4a6b9ff525' to type 'Application.Logic.ActivityMonitorBlo'.'while resolving 'organisationBlo' to 'OrganisationBlo' defined in 'file ... Followed by cascading type initializers...
现在要明确的是,这在带有Spring 1.2.0的.NET 2.0中运行良好。 所以问题是,1.2.0 和 1.3.2 之间发生了什么变化可能导致此错误? 或者,有人可以进一步解释此错误,以及 aop 如何导致此错误?
除了 Spring.Core、Spring.Aop 和所有其他 Spring.* 引用之外,我没有升级解决方案中的任何其他库。
我不确定 1.2.0 和 1.3.2 之间的更改历史记录,但错误消息告诉我您正在尝试设置注入具有建议依赖项的 Application.Logic.ActivityMonitorBlo
属性或构造函数参数。
当您为目标对象定义建议时,默认情况下,spring.net 会创建一个基于组合的代理,代理它在目标类中找到的所有接口。如果它找不到任何接口,那么它会创建一个继承目标类的代理类,并为目标类上的所有虚拟方法创建代理方法,请参阅有关代理机制的 Spring 文档。
我多次收到此错误消息,例如,当我向以前没有任何接口的类添加接口时。突然间,aop 代理不再是目标类型的类,而是基于组合的代理,仅实现添加的接口,从而导致相同的错误。
(请注意,通常最好依赖于接口而不是具体类。
在 1.1.0 和 1.3.2 之间确实发生了变化,增加了一个基于继承的 aop 配置器,但我不确定这与你的问题有什么关系。