你非常熟悉的Spring的@Autowired的底层注入原理

前言:今天在群里看有人在讨论@Autowired相关的知识,有很多人说按照类型装配依赖对象,有说按name装配依赖的对象,有的说先按类型再按照name去装配......这些问题虽然很基础,但是确实也有很多人不清楚,很多人也是只是记住了装配的对象,这种也就糊弄下低级面试官而已,今天我们就从spring源码的角度来看这个面试官喜欢问的@Autowired这个装配顺序。

1.先来一个入门小demo(前提是要有spring-context的依赖),几个基础的类,我就不详细介绍了,自己看截图

2.直接启动main方法

结果:毫无疑问,这个时候肯定会报错,会报错,大致的错误应该就是,希望找到一个bean但是找到两个。。。。

如果把testService里面注入的名字改一下就不会报错了

扫描二维码关注公众号,回复: 11087216 查看本文章

从这个简单的demo,你能够确定@Autowired是按照什么装配的吗?讲道理我觉得不能。我也不去做这个假设了,没有必要,直接看源码才最有说服力。这边我要提一下:spring的装配模式有多种,byName,byType,construct,no源码用0,1,2,等表示,

但是装配技术仅仅有byName和byType,这点以后总结spring源码的时候会详细说的。

源码分析:(这次我只是直接分析这一次装配的源码,spring的属性填充,后置处理器啥的我都不讲,这些都是在我别的专题有讲过的),大致调用链就是(先调用createBaen-->doCreateBean-->populateBean属性填充-->调用后置处理器来填充属性,Autowired的后置处理器是AutowiredAnnotationBeanPostProcessor)

发布了62 篇原创文章 · 获赞 68 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/oldshaui/article/details/103496127