美文网首页
【Java】报错 "com.sun.proxy.$Proxy c

【Java】报错 "com.sun.proxy.$Proxy c

作者: 印比八方来 | 来源:发表于2018-10-07 08:14 被阅读0次

一.问题分析

1.报错背景

遇到这个问题是在类型转换时,如下:

    WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());

    PassApiServiceImpl service = (PassApiServiceImpl) wac.getBean("passApiService");

2.错误分析

2.1 知识点:

Spring AOP实现方式有两种

1:使用JDK动态代理,如果被代理的目标实现了至少一个接口,则会使用JDK动态代理,所有该目标类型实现的接口都将被代理。

2:通过CGLIB来为目标对象创建代理,若该目标对象没有实现任何接口,则创建一个CGLIB代理,创建的代理类是目标类的子类。

2.2 错误分析

那根据我遇到的情况分析,我的PassApiServiceImpl实现了PassApiService接口,aop应该是使用了JDK Proxy。

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

二.解决方案

1.使用接口来进行类型转换,将PassApiServiceImpl改为PassApiService。

    WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());

    PassApiService service = (PassApiService) wac.getBean("passApiService");

三.其他解决方案

看到有一种解决方案是强制使用CGLIB创建代理,需要引用jar包并修改spring配置文件。我没有使用,有机会再进行了解吧。

相关文章

网友评论

      本文标题:【Java】报错 "com.sun.proxy.$Proxy c

      本文链接:https://www.haomeiwen.com/subject/igwkaftx.html