9.ClassCastException: com.sun.proxy.$Proxy24 cannot be cast to com.rchange.service.SysUser

来源:互联网 发布:波士顿矩阵分析案例ppt 编辑:程序博客网 时间:2024/05/19 00:13

在使用junit测试时,报错:

java.lang.ClassCastException: com.sun.proxy.$Proxy24 cannot be cast to com.rchange.service.SysUserService

解决办法:

Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。如果被代理的目标实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。

        所以,解决办法是,如果用JDK动态代理,就必须为被代理的目标实现一个接口(要注意的地方是:需要将ctx.getBean()方法的返回值用接口类型接收);如果使用CGLIB强制代理,就必选事先将CGLIB包导入项目,设置beanNameAutoProxyCreator的proxyTargetClass属性为true。

这里DeviceService实现了接口IDeviceService,所以会使用JDK动态代理,从而使(DeviceService) deviceService强制转换的时候报错(因为实现IDeviceService接口的代理类是属于DeviceService子类)。因此需要使用CGLIB强制代理。需要在springContext.xml中增加如下配置:

<aop:aspectj-autoproxy proxy-target-class="true"/> 

或者:

使用接口接收返回值

ISysUserService sysUserService = (ISysUserService) atc.getBean("sysUserService");


0 0
原创粉丝点击