org.springframework.beans.factory.BeanNotOfRequiredTypeException

导读:本篇文章讲解 org.springframework.beans.factory.BeanNotOfRequiredTypeException,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!