Spring Aop通过类型获取bean时抛出NoSuchBeanDefinitionException异常

在我学习到aop面向切面编程思想,练习运行程序时

        AnnotationConfigApplicationContext ioc = new AnnotationConfigApplicationContext(SpringConfig.class);
        aopService bean = ioc.getBean(aopServiceimpl.class);
        bean.forSout();

程序抛出以下异常

 起初我以为是因为bean的配置存在问题或者时SpringConfig配置类没将我获取的bean扫描到,更换bean所在类的注解也没有用。后面我反复观看我学习的课程视频,发现老师获取bean使用的是实现类的接口类,尝试使用接口获取bean对象,程序运行成功。

aopService bean = ioc.getBean(aopService.class);

对于此我很疑惑,课程老师也没做过多的讲解,在之后我还是执着于通过实现类来获取bean对象,尝试多次,发现问题出现在被切面类切入点控制的类spring获取不到可用bean,于是拿着这个问题去寻找解决方法,发现几个和我存在同样问题的帖子,但还是没有找到解决的方案,但却认识到异常出现的原因。

SpringAOP本质:代理模式

在使用Spring AOP进行代理时,代理类通常是在运行时动态创建的,由原始类自动生成,原始类仍然存在,但在运行时通常无法直接访问。

所以我们通过类型获取bean,想要获取被切面类切入点控制的类的bean对象,就要通过实现类的代理类类型来获取或者通过接口来获取bean对象。通过接口来获取bean对象,缺点就是实现类只能有一个。

aop的核心概念

目标对象( Target ):原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
代理( Proxy ):目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现

下面链接的帖子博主讲解的更全面,想了解的可以参考

转载研究原文连接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值