1. 程式人生 > >spring使用aop時需要設定proxy-target-class="true" 否則無法依賴注入

spring使用aop時需要設定proxy-target-class="true" 否則無法依賴注入

在spring3以上版本中使用spring的依賴注入(註解或者xml方式)和aop功能時,發現了一個問題,如果不設定<aop:aspectj-autoproxy  proxy-target-class="true"/>那麼在獲取bean時一直報:(無論通過name還是type都獲取不到bean)

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type

或者
Java.lang.ClassCastException: com.sun.proxy.$Proxy12 cannot be cast to cn.edu.nuc.SpringTest.service.impl.DemoServiceImpl

proxy-target-class="true" 與proxy-target-class="false"的區別:
        proxy-target-class屬性值決定是基於介面的還是基於類的代理被建立。如果proxy-target-class 屬性值被設定為true,那麼基於類的代理將起作用(這時需要cglib庫)。如果proxy-target-class屬值被設定為false或者這個屬性被省略,那麼標準的JDK 基於介面的代理

遇到過工程的<aop:aspectj-autoproxy />沒開啟proxy-target-class="true"的情況,結果某靜態工具類中的applicationContext.getBean("xxxx")報NoSuchBeanDefinitionException,估計是<context:componet-scan base-package="xxx.xxx.xxx"></context:componet-scan

>沒有把要getBean要引用的類路徑包含進來,估計完善<context:componet-scan配置應該能修復報錯,當然開啟proxy-target-class="true"也行

參考:http://forum.spring.io/forum/spring-projects/data/58033-beannotofrequiredtypeexception-using-servicelocatorfactorybean-and-transactional

轉自:http://www.07net01.com/2015/07/888618.html