本篇內(nèi)容主要講解“java.lang.ClassCastException報錯怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java.lang.ClassCastException報錯怎么解決”吧!
在成都網(wǎng)站制作、成都做網(wǎng)站中從網(wǎng)站色彩、結構布局、欄目設置、關鍵詞群組等細微處著手,突出企業(yè)的產(chǎn)品/服務/品牌,幫助企業(yè)鎖定精準用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報的無錫營銷推廣。創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站建設10多年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。
java.lang.ClassCastException: com.sun.proxy.$Proxy32 cannot be cast to com.bkc.bpmp.core.cache.MemcachedManager at com.bkc.bpmp.common.utils.CacheUtils.(CacheUtils.java:11) at com.bkc.bpmp.modules.sys.controller.MainController.showCache(MainController.java:47) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:775) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
java 實現(xiàn)方式
public class MemcachedManager implements CacheManager
Spring 文檔中這么寫的:Spring AOP 部分使用JDK 動態(tài)代理或者 CGLIB 來為目標對象創(chuàng)建代理。如果被代理的目標實現(xiàn)了至少一個接口則會使用JDK 動態(tài)代理。所有該目標類型實現(xiàn)的接口都將被代理。若該目標對象沒有實現(xiàn)任何接口,則創(chuàng)建一個CGLIB 代理。
所以,解決辦法是,如果使用 JDK 動態(tài)代理,就必須被代理的目標實現(xiàn)一個接口(要注意的地方是,需要將 ctx.getBean()方法的返回值用接口類型接收);如果用CGLIB 強制代理,就必須事先將CGLIB 包導入項目,設置 beanNameAutoProxyCreator 的proxyTargetClass 屬性為true。
這里MemcachedManager 實現(xiàn)了接口CacheManager,所以會使用JDK動態(tài)代理。
// 正確 private static CacheManager memcachedManager = (CacheManager)SpringContextHolder.getBean("shiroCacheManager"); MemcachedManager // 報錯 private static MemcachedManager memcachedManager = (MemcachedManager)SpringContextHolder.getBean("shiroCacheManager"); // 報錯 private static CacheManager memcachedManager = (MemcachedManager)SpringContextHolder.getBean("shiroCacheManager");
當然,還有一種方法 是 CGLIB強制代理。需要在springContext.xml中增加如下配置:
但 事實上個人不建議 采用 proxy-target-class 設置為 true 的方式,因為 我們的項目結構一般都會是 X extends BaseDao ,然后在BaseService 層中可能有Dao 層 @Autowared 時,如果使用了這種層次,可能就出現(xiàn) 子類 注入 父類中,如果這里強制代理的話,會出錯。
1.Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,實現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進行復雜的編程。
2.Java具有簡單性、面向?qū)ο?、分布式、安全性、平臺獨立與可移植性、動態(tài)性等特點。
3.使用Java可以編寫桌面應用程序、Web應用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應用程序等。
到此,相信大家對“java.lang.ClassCastException報錯怎么解決”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!