今天学习了动态代理实现归还连接的知识,练习的时候出现异常,如图所示
出现异常Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to java.sql.Connection
创建代理对象时传递的第二个参数为connection.getClass.getInterfaces() ,将其修改为new Class[]{Connection.class}即可解决。
那为什么会这样呢?原因在于我使用的mysql数据库驱动的问题,由于数据库驱动不同,Connection.class.getInterfaces()返回的结果也不同,它返回的是一个Class[]数组,然而此数组的第一个元素必须是Connection才能把创建的代理类转为Connection对象,否则就会报错。