JDK动态代理注意事项

一个蠢问题,记一下,防止下次再犯。

今天把上周写的一个JDK动态代理的demo拿出来重写看了下,然后修改了重写的invoke方法的返回值,结果启动Main方法时就报错ClassCastException。

折腾来折腾去,愣是没找到原因,后面还是把生产的Proxy文件给复制了一份,然后修改Main方法直接调用复制的Proxy类的方法进行debug。

找到原因如下 :代理是将类的所有方法代理了,这个是重点。

所有方法的返回值都是implement InvocationHandler重写的invoke方法的返回值。

也就是说明,这个invoke方法的返回值不能随便写,按规则来就只能是return method.invoke。

 

当时也是自己傻逼,翻生成的代理类的代码时就认为是重写的问题,结果想着super.toString执行的时候想岔路了,觉得这块没问题,我……下午5点到10点半,5个半小时……

上一篇:Mybatis逆向工程(自动生成实体、mapper以及xml)


下一篇:Java的代理机制