在使用spring的annotation注解通过AOP在action上进行log记录时,产生了java.lang.NoSuchMethodException: $Proxy的错误,这是由于配置不完全产生的错误
开始时的配置为:
<aop:aspectj-autoproxy />
这样采用其默认的代理方式。其默认的代理方式是采用的java的proxy代理,这种代理方式需要使用接口。故而在此我们需要使用cglib作为代理工具,所以需要修改配置为
<aop:aspectj-autoproxy proxy-target-class="true" />
这样就采用了cglib的代理方式,也就可以不使用接口。
使用cglib代理的时候不要忘了添加cglib.jar包哦!呵呵
解决了上述问题后,如果你在action中使用@autoware注入参数,那么还可能会面临着注入值为null的状况:
此时解决方法为下列三选一:
1.取消@autoware注入,采用get或set注入
2.将action纳入spring管理
3.修改Struts.xml文件的属性<constant name="struts.objectFactory.spring.autoWire.alwaysRespect" value="true" />,使自动注入总是有效