java.lang.ClassCastException: com.sun.proxy.$Proxy27 cannot be cast to com.bbk.n002.service.QuestionService


 1 嚴重: Servlet /N002-1.0 threw load() exception
 2 java.lang.ClassCastException: com.sun.proxy.$Proxy27 cannot be cast to com.bbk.n002.service.QuestionService
 3     at com.bbk.n002.servlet.CreateTaskQueueServlet.init(CreateTaskQueueServlet.java:28)
 4     at javax.servlet.GenericServlet.init(GenericServlet.java:160)
 5     at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
 6     at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
 7     at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
 8     at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
 9     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
10     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
11     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
12     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
13     at java.util.concurrent.FutureTask.run(Unknown Source)
14     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
15     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
16     at java.lang.Thread.run(Unknown Source)

Spring的文檔中這么寫的:Spring AOP部分使用JDK動態代理或者CGLIB來為目標對象創建代理。如果被代理的目標實現了至少一個接口,則會使用JDK動態代理。所有該目標類型實現的接口都將被代理。若該目標對象沒有實現任何接口,則創建一個CGLIB代理。

        所以,解決辦法是,如果用JDK動態代理,就必須為被代理的目標實現一個接口(要注意的地方是:需要將ctx.getBean()方法的返回值用接口類型接收);如果使用CGLIB強制代理,就必選事先將CGLIB包導入項目,設置beanNameAutoProxyCreator的proxyTargetClass屬性為true。

這里DeviceService實現了接口IDeviceService,所以會使用JDK動態代理,從而使(DeviceService) deviceService強制轉換的時候報錯(因為實現IDeviceService接口的代理類是屬於DeviceService子類)。因此需要使用CGLIB強制代理。需要在springContext.xml中增加如下配置:


[html]
<aop:aspectj-autoproxy proxy-target-class="true"/> 

<aop:aspectj-autoproxy proxy-target-class="true"/>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM