Bean named ‘xxx‘ is expected to be of type ‘xxxx‘ but was actually of type ‘com.sun..proxy.$Proxy19‘

在SSM项目中的Service层遇到了这个报错

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean
named ‘employeeServiceImpl’ is expected to be of type
‘com.mlj.service.EmployeeServiceImpl’ but was actually of type
‘com.sun.proxy.$Proxy19’

名为employeeServiceImpl的bean类型本应该是com.mlj.service.EmployeeServiceImpl
实际上却是com.sun.proxy.$Proxy19

这个问题是AOP引起的
SpringAOP实现的两种方式动态代理: JDK和Cglib

JDK:目标对象必须是实现某一接口
Cglib:不需要接口,但需要两个jar包:asm.jar和cglib.jar

报错代码:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
EmployeeServiceImpl employeeServiceImpl = applicationContext.getBean("employeeServiceImpl", EmployeeServiceImpl.class);
employeeServiceImpl.getAllEmp();

问题出在这里的employeeServiceImpl 必须向上转型为接口,不能用接口的实现类(EmployeeServiceImpl)来转换Proxy的实现类,它们是同级,应该用共同的接口(EmployeeService)来转换
把代码改为

EmployeeService employeeServiceImpl =applicationContext.getBean(“employeeServiceImpl”,EmployeeService.class);

简单地说就是要用该类的接口来转换,而且必须是该类的接口

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值