错误java.lang.ClassCastException: com.sun.proxy.$Proxy32 cannot be cast to com.AspectJ.serv

1、错误截图:
在这里插入图片描述

2、原因:动态代理生成的类无法转换到我们自定义的实现类。在三层结构中的业务层的类实现了相应的接口,但是在applicationContext.xml配置文件中没有相应的aop配置(这里是强制使用 cglib 动态代理)。

3、问题解决方法:
(1)在applicationContext.xml配置文件中添加这一行

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

在这里插入图片描述
或者直接添加这一句:

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

(2)在pom.xml文件中引入依赖

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.3.0</version>
        </dependency>

4、原理:
(1)当我们业务层使用实现接口的方式时,会默认采用 JDK 的动态代理形式;

(2)当我们业务层没有使用实现接口的方式时,会默认采用cglib 的动态代理(这个的执行效率会高一些,利用到了字节码)

(3)那我们可以既实现接口又想使用 cglib 的动态代理形式的吗?
答案是可以,就是上面解决问题的方式,在xml文件中添加一句(强制使用 cglib 动态代理):

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

另外:事务报这个错误也是很常见的
在这里插入图片描述
解决地址:简单分析 使用spring @transactionl事务注解之后注入service报错的问题

有用点个关注,手留余香!😗 😗 😗

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页