Bean named ‘xxx‘ is expected to be of type ‘xxx‘ but was actually of type ‘jdk.proxy2.$Proxy24‘

在运行spring测试程序时出现了

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'accountService' is expected to be of type 'service.impl.AccountServiceImpl' but was actually of type 'jdk.proxy2.$Proxy24'

异常。

测试程序如下:

ApplicationContext app=new AnnotationConfigApplicationContext(Spring6Config.class);
        AccountServiceImpl accountService = app.getBean("accountService", AccountServiceImpl.class);


异常发生的背景:类AccountServiceImpl继承了接口AccountService,现在需要代理类AccountServiceImpl,出现了如标题所示格式的异常。


异常发生原因:JDK动态代理只能代理接口,若要代理类,需要使用cglib或其他代理方式。


异常的解决方法:

1.修改测试程序代码,将返回值改为类继承的接口:

ApplicationContext app=new AnnotationConfigApplicationContext(Spring6Config.class);
        AccountService accountService = app.getBean("accountService", AccountService.class);

2.修改spring的XML配置文件:

(1).使用aop配置:
    <aop:config proxy-target-class="true"> </aop:config>

(2). aspectj配置:
    <aop:aspectj-autoproxy proxy-target-class="true"/>

(3). 事务annotation配置:
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

3种配置,只要使用一种即可,设置proxy-target-class为true即使用cglib的方式代理对象。

总结了基本算是四种方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸡『』

最不值钱的便是钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值