用spring做為struts2的ObjectFactory,用spring來生成action,并對action的方法加上aop時,不要使Action繼承于ActionSupport,否則會出現(xiàn)類似于以下的異常:
java.lang.NoSuchMethodException: $Proxy84.executeList()
at java.lang.Class.getMethod(Class.java:1581)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:55)
我的Action類繼承于ActionSupport類,沒有直接實現(xiàn)什么接口。我用AOP把事務加在了Action里的execute打頭的方法前,結果,運行時就出現(xiàn)了上面的找不到方法的異常,如果不讓Action繼承于ActionSupport類就沒有了這樣的問題。在調試的時候,發(fā)現(xiàn)spring生成的代理類里面只有一個execute方法??磥韘pring在生成代理類時,如果找不到被代理類直接實現(xiàn)的接口,就會到它的超類中去找。在這個例子中,spring就找到了ActionSupport實現(xiàn)的Action接口。
我又試過在struts.xml里定義讓struts2以接口的方式去取Action,Action實現(xiàn)一個自己接口,結果struts2又報另外一個錯誤??磥碓谶@種情況下,只好不要讓Action繼承于struts2的ActionSupport類了。