依赖注入
2022-06-27 22:43:44 1 举报
Spring
作者其他创作
大纲/内容
resolveDependency()
返回null
如果是属性注入,那么就是属性的名字
Optional
判断decriptor类型
返回对象包装成Optional
如果没有@Primary,那么则看Bean上是否通过@Priority定义优先级,如果定义了则获取优先级最高的Bean
Collection
GenericTypeAwareAutowireCandidateResolver检查BeanDefinition的beanClass属性和当前注入点的type是否匹配,匹配则通过筛选
如果是set方法,那就是参数的名字
找出了,也会判断时候Class对象,如果是,则调用getBean方法生成Bean对象然后返回
超过一个
找打了
就直接返回该bean,如果是Class对象,则条用getBean生成该bean对象
再调用ObjectFactory的个体Object方法时调用
AutowiredAnnotationBeanPostProcessor存在@Autowired,@Value
SimpleAutowireCandidateResolver检查BeanDefinition的autowireCandidate属性,为true表示通过筛选
如果存在
直接返回Map
直接生成一个ObjectFactory
isRequired
判断@Value注解
从多个Bean中选择被@Primary标注了的Bean,如果有多个@Primary会报错
findAutowireCandidates()该方法返回一个Map,表示会根据type去找bean,Map的key为beanName,Map的value为对象(注意可能是bean对象,也可能是某个bean的class对象,英文该方法只负责根据类型找到对应的bean,如果该bean还没有实例化,那么该方法不负责实例化,只返回bean对应的Class对象,表示对象这个Bean也是结果之一)
否
根据Type有没有找到bean
寻找注入点
如果出现了static的字段直接结束寻找
如果是String类型的话就不用寻找
只有一个
如果没有优先级,那么则使用descriptor.getDependencyName()来确定一个唯一的Bean
报错
如果没有
判断descriptor.getDependencyType()
调用下面的方法,将Map的values返回
是
QualifierAnnotationAutowireCandidateResolver检查BeanDefinition的qualifier属性和当前注入点的qualifier属性是否匹配,匹配则通过筛选
Map
是否找出一个唯一的Bean
如果依赖描述上有@Lazy注解,那么会生成一个代理对象,然后返回,那么再调用代理对象中的方法时,才会调用一下方法
获取并解析descriptor上的@Value注解,进行解析并返回
doResolveDependency(descripror)
是否超过一个
0 条评论
下一页