java带参数的构造⽅法_Spring是如何通过有参构造⽅法实例
化的?详细分析在这⾥!...
前⾯的⽂章介绍了Spring Bean中属性⾃动注⼊的实现原理(Autowired注解都会⽤,那么你知道它实现⾃动注⼊的原理吗),当时提到还有⼀种特殊的注⼊过程(通过构造⽅法注⼊属性)的实现原理有些不⼀样,需要单独另外介绍,今天我们就⼀起来看看带参数的Bean是如何被创建的。
通过构造⽅法注⼊属性的Demo
java接口有没有构造方法我们先⽤⼀个简单的⽰例来看看通过构造⽅法注⼊属性的使⽤⽅法是怎样的。
Java代码:
xml配置⽂件:
运⾏结果:
从Demo中可以看到,通过构造⽅法实现属性注⼊并不需要有特别的设置,使⽤上是⾮常的⽅便的。
通过构造⽅法注⼊属性的实现原理
通过上⾯的Demo我们看到了构造⽅法注⼊属性的⽤法和效果了,接下来我们就来看看它的实现原理。
⾸先我们在对应的构造⽅法上⾯打个断点,启动程序,进⼊断点后我们可以得到如下的调⽤堆栈:
通过这个调⽤堆栈,我们⼤体可以知道整个实现过程:
在创建Bean的时候,发现需要通过注⼊属性创建的时候,就调⽤autowireConstructor⽅法来完成Bean的创建,该⽅法最终是通过反射的⽅式完成创建的。
接下来我们就终点分析这个autowireConstructor⽅法。这个⽅法的代码⽐较长,基本执⾏流程如下图:
Spring是如何选择最合适的构造⽅法的
⼀个BeanClass往往可能存在多个构造⽅法,Spring在初始化Bean的时候就需要从这些构造⽅法中寻到⼀个最合适的⽅法,那么它是按照哪种逻辑来查的呢?
⾸先会计算⼀下最少要求的参数个数:指定参数的个数或者是XML配置⽂件中配置的参数个数。
然后对构造⽅法列表进⾏排序,参数个数多的排前⾯,这样可以加快寻到最优构造⽅法。
最后循环遍历每⼀个构造⽅法,从中计算最合适的⽅法,计算过程为:
Autowired注解都会⽤,那么你知道它实现⾃动注⼊的原理吗
Spring boot启动过程(续)
对Spring实现原理感兴趣的朋友可以点个关注,接下来的⼀段时间我将会从Spring的源代码⼊⼿,详细的介绍Spring的实现原理。
知其然,更要知其所以然,⽅能融会贯通!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论