spring那些事 研究IOC容器6-2

时间:2019-02-11
本文章向大家介绍spring那些事 研究IOC容器6-2,主要包括spring那些事 研究IOC容器6-2使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

spring那些事 研究IOC容器6-2

spring ConstructorResolver#autowireConstructor源码分析(5.1.4.RELEASE)

从163行开始,ConstructorResolver会针对多个构造函数进行选择,选择过程如下
1如果已经选出合适的构造函数,直接跳出循环
2如果配置的构造参数小于此次循环中构造函数的参数数量,继续循环
3如果构造参数resolvedValue非空,检查是否添加了Jdk6的@ConstructorProperties,如果添加通过其获取构造函数参数名,如果未添加采用反射方式获取构造函数参数名
4计算参数值(argsHolder.arguments)每个参数类型与构造方法参数列表(paramTypes)中参数的类型差异量,差异量越大表明参数类型差异越大。参数类型差异越大,表明当前构造方法并不是一个最合适的候选项。引入差异量(typeDiffWeight)变量目的:是将候选构造方法的参数列表类型与参数值列表类型的差异进行量化,通过量化后的数值筛选出最合适的构造方法。讲完差异量,再来说说 mbd.isLenientConstructorResolution() 条件。官方的解释是:返回构造方法的解析模式,有宽松模式(lenient mode)和严格模式(strict mode)两种类型可选。具体的细节没去研究,就不多说了。 如果合适,那么改构造方法就时可以将被使用的构造方法