spring 依赖注入流程
2023-11-30 10:48:45 0 举报
spring 依赖注入流程
作者其他创作
大纲/内容
找出所有符合类型bean的名称
属性或set方法上使用了@Lazy注解
判断当前注入点属性是否和qualifier属性值一致如:@Qualifier(\"orderService\")
字段或者方法 具有这些属性@Autowired、@Value、@Inject
1.对占位符的处理2.对spring 表达式的处理
对应的类型是数组、Map这些,找到了直接返回
根据名称
那么则构造一个代理对象并返回,真正使用该代理对象时才进行类型筛选Bean
有可能筛选出来的是某个bean的类型,此处就进行实例化,调用getBean
字段
依赖对象类型为Optional.class的处理
第一层过滤
QualifierAnnotationAutowireCandidateResolver
字段和方法 对属性的赋值AutowiredFieldElement.inject()AutowiredMethodElement.inject()解析依赖 获取返回依赖对象的入口DefaultListableBeanFactory.resolveDependency
在resolvableDependencies找出符合类型的bean对象
InstantiationAwareBeanPostProcessor 实现类AutowiredAnnotationBeanPostProcessor的postProcessProperties()方法,会直接给对象中的属性赋值
GenericTypeAwareAutowireCandidateResolver
过滤后符合注入的bean对象
@Primary
@Value 注解处理
@Bean(autowireCandidate = false) public OrderService orderService() throws Exception { return new OrderService(); }
泛型类型是否匹配
this.resolvableDependencies
SimpleAutowireCandidateResolver 是否autowireCandidate=true
findAutowireCandidates()
BeanFactoryUtils.beanNamesForTypeIncludingAncestors()
最后找到属性注入的对象,通过反射进行属性赋值或方法调用
找出注入点
过滤相同类型的bean对象
属性赋值 依赖注入
方法
第二层过滤
@Priority(1)
过滤注入点该bean是否能够注入
真正的依赖注入开始doResolveDependency()
依赖对象类型为ObjectFactory.classObjectProvider.class的处理
0 条评论
下一页