1. 程式人生 > >springAOP報java.lang.NoSuchMethodException: $Proxy和使用AOP後action採用autoware注入值為null

springAOP報java.lang.NoSuchMethodException: $Proxy和使用AOP後action採用autoware注入值為null

 在使用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" />,使自動注入總是有效