org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named ‘userServiceImpl’ is expected to be of type ‘com.wcx.service.impl.UserServiceImpl’ but was actually of type ‘com.sun.proxy.$Proxy14’
错误代码
UserService userService = context.getBean("userServiceImpl", UserServiceImpl.class);
userService.queryAll().forEach(System.out::println);
spring的aop其实是由动态代理实现,支持两种动态代理,一种是jdk提供的InvocationHandler接口,另一种cglib提供的MethodInterceptor接口。jdk提供的需要被代理类实现接口,而cglib的不需要。
xml配置文件
<!-- 配置被代理对象 -->
<bean id="userServiceImpl" class="com.wcx.service.impl.UserServiceImpl"></bean>
<!-- 配置通知加强逻辑 -->
<bean id="myAdvice" class="com.wcx.aop.MyAdvice"></bean>
<!-- aop 配置 -->
<aop:config>
<!-- 配置切面(切入点+通知),将通知织入到切点中 -->
<aop:aspect ref="myAdvice">
<!-- 环绕通知 通知的方法 要织入到切点的方法 -->
<aop:around method="aroundMethod" pointcut="execution(public int com.wcx.service.impl.UserServiceImpl.addUser(com.wcx.entity.User))"></aop:around>
<aop:around method="aroundMethod" pointcut="execution(public int com.wcx.service.impl.UserServiceImpl.deleteUserById(int))"></aop:around>
<aop:around method="aroundMethod" pointcut="execution(public int com.wcx.service.impl.UserServiceImpl.updateUser(com.wcx.entity.User))"></aop:around>
</aop:aspect>
</aop:config>
我这边的UserServiceImp是实现了UserService接口,所以UserServiceImpl.class应该改成UserService.class。
UserService userService = context.getBean("userServiceImpl", UserService.class);
userService.queryAll().forEach(System.out::println);
执行成功
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99725.html