关于Spring AOP动态代理类型转换失败问题--java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to ...

学习Spring AOP中的动态代理配置时遇到一个类型转换失败的报错:

java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to com.itheima.aop.Target

关于Spring AOP动态代理类型转换失败问题--java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to ..._第1张图片

Spring使用的动态代理有两种:JDK Proxy 和CGLIB。使用前者必须实现至少一个接口才能实现对方法的拦截。使用后者需要两个jar包:asm.jar和cglib.jar,并修改spring配置文件。

我在测试时使用的JDK Proxy,下面是我的测试代码:

关于Spring AOP动态代理类型转换失败问题--java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to ..._第2张图片

报错的原因:不能用接口的实现类(Target)来转换Proxy的实现类,它们是同级,应该用共同的接口来转换。

 

解决办法:

将获得Bean的接收类型改成接口类型(TargetInterface):

关于Spring AOP动态代理类型转换失败问题--java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to ..._第3张图片

修改之后,程序运行正常。

 

你可能感兴趣的:(BUG处理)