java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to java.sql.Connection異常問題解決


  代碼如下:

        Connection proxy = (Connection) Proxy.newProxyInstance(Connection.class.getClassLoader(),
                Connection.class.getInterfaces(), new InvocationHandler() {

                    @Override
                    public Object invoke(Object proxy, Method method,
                            Object[] args) throws Throwable {
                        if ("close".equals(method.getName())) {
                            returnConn(conn);
                            return null;
                        } else {
                            return method.invoke(conn, args);
                        }
                    }
                });

  在使用動態代理增強Connection連接對象的close方法時,我碰到了如題所示的異常。通過搜索我發現這個異常出現的原因在於我使用的mysql數據庫驅動的問題,由於數據庫驅動不同,Connection.class.getInterfaces()返回的結果也不同,它返回的是一個Class[]數組,然而此數組的第一個元素必須是Connection才能把創建的代理類轉為Connection對象,否則就會報錯。

  所以這里我們可以采取一個替代方式替換Connection.class.getInterfaces(),即new Class[] { Connection.class },這樣無論數據庫驅動是什么版本的驅動,都能保證這個類型轉換不出錯。


免責聲明!

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



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