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

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

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

2.直接启动main方法

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

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

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

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

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

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值