java带参数的构造方法_Spring是如何通过有参构造方法实例化的?详细分析在这里!...

前面的文章介绍了Spring Bean中属性自动注入的实现原理(Autowired注解都会用,那么你知道它实现自动注入的原理吗),当时提到还有一种特殊的注入过程(通过构造方法注入属性)的实现原理有些不一样,需要单独另外介绍,今天我们就一起来看看带参数的Bean是如何被创建的。

通过构造方法注入属性的Demo

我们先用一个简单的示例来看看通过构造方法注入属性的使用方法是怎样的。

Java代码:

02577c935ee07ec5a0984dc62f8c0cc7.png

xml配置文件:

69dac7d31ac7ac9d0c90fb8bbf52d43c.png

运行结果:

1338fc2b34b2861126c589eb831450a0.png

从Demo中可以看到,通过构造方法实现属性注入并不需要有特别的设置,使用上是非常的方便的。

通过构造方法注入属性的实现原理

通过上面的Demo我们看到了构造方法注入属性的用法和效果了,接下来我们就来看看它的实现原理。

首先我们在对应的构造方法上面打个断点,启动程序,进入断点后我们可以得到如下的调用堆栈:

a1885db0ef292dc274886f2d9736daea.png

通过这个调用堆栈,我们大体可以知道整个实现过程:

在创建Bean的时候,发现需要通过注入属性创建的时候,就调用autowireConstructor方法来完成Bean的创建,该方法最终是通过反射的方式完成创建的。

接下来我们就终点分析这个autowireConstructor方法。这个方法的代码比较长,基本执行流程如下图:

4765afdeabb09f45fcac1554af96ffd4.png

Spring是如何选择最合适的构造方法的

一个BeanClass往往可能存在多个构造方法,Spring在初始化Bean的时候就需要从这些构造方法中寻找到一个最合适的方法,那么它是按照哪种逻辑来查找的呢?

首先会计算一下最少要求的参数个数:指定参数的个数或者是XML配置文件中配置的参数个数。

然后对构造方法列表进行排序,参数个数多的排前面,这样可以加快寻找到最优构造方法。

最后循环遍历每一个构造方法,从中计算最合适的方法,计算过程为:

b7585d136049cf1877f0015822820b34.png

Autowired注解都会用,那么你知道它实现自动注入的原理吗

Spring boot启动过程(续)


对Spring实现原理感兴趣的朋友可以点个关注,接下来的一段时间我将会从Spring的源代码入手,详细的介绍Spring的实现原理。

知其然,更要知其所以然,方能融会贯通!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值