如果围绕操作类创建代理建议,则Spring Web应用程序上下文不会返回Struts2 Action方法

时间:2014-03-28 12:46:07

标签: java spring struts2 aop interceptor

我试图使用Spring AOP拦截Struts2的动作类方法,但它没有用。从Spring Web Application上下文返回的bean并不简单地使用Action类的方法(使用Reflection检查)。但是它只有ActionSupport类(Struts API)的方法,我们的Action类扩展了它们。

我可以在日志中看到:

16:55:20,328 DEBUG [org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator] (http-01h3463916-172.20.211.235-8543-5) Creating implicit proxy for bean 'deviceAction' with 0 common interceptors and 2 specific interceptors

16:55:20,328 DEBUG [org.springframework.aop.framework.JdkDynamicAopProxy] (http-01h3463916-172.20.211.235-8543-5) Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [com.tcs.oss.tims.deviceManagement.action.DeviceAction@70103f6e]

16:55:20,332 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] (http-01h3463916-172.20.211.235-8543-5) Finished creating instance of bean 'deviceAction'

返回的action bean对象的类型为:class com.sun.proxy。$ Proxy36

有趣的是,即使它们是由Spring AOP建议的,其他bean(不是动作bean),返回的代理对象包括bean声明的类的所有方法。

感谢任何帮助...

1 个答案:

答案 0 :(得分:0)

最后我开始工作了。这是由于Spring的代理机制。 ---基于接口的代理(JDK代理)或基于类的代理(基于CGLib的代理)。因为,我的Action类是从ActionSupport类扩展而来的,而ActionSupport又有一个接口实现。为Action类创建了一个JDK代理 - 它没有任何特定于方法(非继承)的Action类。

在AOP配置中添加proxy-target-class =“true”属性,使Spring生成CGLib(需要在Classpath中添加CGLib)基于代理..现在它具有Action类的非继承方法

非常感谢...;)