推断构造方法流程
2023-05-11 17:23:28 0 举报
spring推断构造方法流程图
作者其他创作
大纲/内容
候选构造方法就是通过@Autowired注解逻辑刷选出来的构造方法
只有一个
对候选构造方法进行排序,public的方法排在最前面,都是public的情况下参数个数越多越靠前
获取@ConstructorProperties注解指定的参数名
使用无参的构造方法创建bean
无
continue:遍历下一个
AbstractAutowireCapableBeanFactory.autowireConstructor()->ConstructorResolver.autowireConstructor()根据@Autowired注解推断出来的构造方法进一步确定要使用构造方法,并对构造方法的参数进行参入注入
根据构造方法创建bean
遍历所有的候选构造方法
获取候选构造方法
beanDefinition添加Supplier
使用最小匹配值的构造方法
获取构造方法最小参数个数
抛异常
1
有
获取构造方法的参数名或beanDefinition的beanFactory工厂获取构造方法参数名
break:遍历结束
未使用
构造方法参数空获取缓存参数
判断是否通过Spring自动去找构造方法的参数
构造方法上是否使用了@ConstructorProperties注解
判断是否只有一个无参的构造方法
是否有可用的构造方法
使用getBean()传入的参数
获取缓存中的参数进行参数注入
类加载器加bean的.class
是否有最小匹配值
参数小于构造方法的参数个数
添加@Bean注解的beanDefinition
根据参数类型和参数名找对应的参数的bean对象
缓存中是否有构造方法
获取缓存中的构造方法和参数
是
使用了
AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors()->SmartInstantiationAwareBeanPostProcessor.determineCandidateConstructors()->AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors根据bean的构造方法的@Autowired注解进行推断构造方法(可能会返回多个构造方法)
否
获取构造方法参数类型
记录多个匹配值相等的构造方法
使用当前遍历的构造方法和参数
根据@Autowired注解推断构造方法
直接使用这个无参的构造方法
BeanDefinition指定了构造方法参数值
参数个数和构造方法的参数个数相等
未指定
缓存可用的构造方法
有多个相等的匹配值
对候选构造方法排序
根据构造方法参数类型和参数个数计算匹配值
构造方法、参数存在,但参数大于构造方法参数个数
是否有可用的构造方法和参数
AbstractAutowireCapableBeanFactory.createBeanInstance():创建bean的方法进行构造方法推断
参数个数和构造方法的参数个数不相等
指定了
是否有多个可用的构造方法
构造方法是否有参数
0 条评论
回复 删除
下一页