使用SpringAOP时遇到的BeanNotOfRequiredTypeException异常

本文探讨了在Spring AOP中遇到的BeanNotOfRequiredTypeException,揭示了使用JDK代理与CGLIB代理的区别,以及如何通过修改<aop:aspectj-autoproxy>配置来解决因proxy-target-class属性导致的问题。

BeanNotOfRequiredTypeException异常AOP

在使用aop实现动态代理时,遇到了一个异常,异常如下图:
在这里插入图片描述
大概就是我的类明明应该是Programmer,结果显示是$Proxy13,就没生成成功。
发现是在配置文件中,配置aspctj增强时使用了:<aop:aspectj-autoproxy/>,这个代码默认为proxy-target-class=“false”,这代表当前动态代理使用的是JDK动态代理技术织入增强。而我使用的子类实现接口的方式实现动态代理,jdk的明显不行,应该用cglib才能代理成功。将配置文件改为<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>,运行成功。

Spring 项目中遇到 `BeanNotOfRequiredTypeException: Bean named 'dataSourceProxy' expected type 'io.seata.rm.datasource.DataSourceProxy' but actual type 'com.zaxxer.hikari.HikariDataSource$$SpringCGLIB$$0'` 异常,通常是因为 Spring 容器中注入的 Bean 类型与期望的类型不匹配。以下是一些可能的解决方法: #### 手动配置 DataSourceProxy 确保在 Spring 配置中正确创建 `DataSourceProxy` Bean,而不是直接使用 `HikariDataSource`。示例代码如下: ```java import com.zaxxer.hikari.HikariDataSource; import io.seata.rm.datasource.DataSourceProxy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class DataSourceConfig { @Bean public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); // 配置 HikariDataSource dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test"); dataSource.setUsername("root"); dataSource.setPassword("password"); return dataSource; } @Bean public DataSourceProxy dataSourceProxy(DataSource dataSource) { return new DataSourceProxy(dataSource); } } ``` #### 检查依赖注入 确保在需要使用 `DataSourceProxy` 的地方,注入的是正确的 Bean。例如: ```java import io.seata.rm.datasource.DataSourceProxy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.sql.DataSource; @Service public class MyService { private final DataSourceProxy dataSourceProxy; @Autowired public MyService(DataSourceProxy dataSourceProxy) { this.dataSourceProxy = dataSourceProxy; } // 业务逻辑 } ``` #### 检查配置文件 确保没有在配置文件中错误地配置了 `DataSource` Bean。例如,在 `application.yml` 或 `application.properties` 中,不要直接配置 `HikariDataSource`,而是让 Spring 容器通过上述配置类来创建 `DataSourceProxy`。 #### 检查 AOP 代理 如果项目中使用了 AOP 代理,可能会导致 Bean 类型被代理包装。确保 AOP 配置不会影响 `DataSourceProxy` 的正常注入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值