Spring源码剖析-Autowired自动注入原理,2024年最新ASP软件需求分析

本文深入探讨了Spring框架中@Autowired自动注入的原理,详细介绍了BeanPostProcessor的注册过程,特别是AutowiredAnnotationBeanPostProcessor的注册与作用。通过源码分析,揭示了如何查找和处理@Autowired注解,以及依赖注入的过程。同时,提到了适用于计算机专业学生的2024年毕业设计项目资源。
摘要由CSDN通过智能技术生成

//处理实现了 ordered的后置处理器

for (String ppName : orderedPostProcessorNames) {

//得到后置处理器Bean

BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);

//添加到集合中

orderedPostProcessors.add(pp);

if (pp instanceof MergedBeanDefinitionPostProcessor) {

internalPostProcessors.add(pp);

}

}

//排序后置处理器

sortPostProcessors(orderedPostProcessors, beanFactory);

//注册后置初期

registerBeanPostProcessors(beanFactory, orderedPostProcessors);

// Now, register all regular BeanPostProcessors.

//现在,注册所有常规 BeanPostProcessor。

List nonOrderedPostProcessors = new ArrayList<>();

//

for (String ppName : nonOrderedPostProcessorNames) {

//得到Bean的实例

BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);

nonOrderedPostProcessors.add(pp);

if (pp instanceof MergedBeanDefinitionPostProcessor) {

internalPostProcessors.add(pp);

}

}

//注册常规后置处理器

registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);

// Finally, re-register all internal BeanPostProcessors.

sortPostProcessors(internalPostProcessors, beanFactory);

//最后,重新注册所有内部 BeanPostProcessor。

registerBeanPostProcessors(beanFactory, internalPostProcessors);

// Re-register post-processor for detecting inner beans as ApplicationListeners,

// moving it to the end of the processor chain (for picking up proxies etc).

//ApplicationListener检测器,也是一个BeanPostProcessor

beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));

}

这里根据类型:BeanPostProcessor.class 找到了所有的后置处理器,然后通过beanFactory.getBean创建Bean的实例,根据优先级依次注册到AbstractBeanFactory中的List<BeanPostProcessor> beanPostProcessors = new CopyOnWriteArrayList<>() 集合中 , 注册顺序如下:

  1. 注册实现了PriorityOrdered 接口的优先级最高的后置处理器

  2. 注册实现了 Ordered接口的有序的后置处理器

  3. 注册常规后置处理器

  4. 注册内部使用的后置处理器MergedBeanDefinitionPostProcessor

对于AutowiredAnnotationBeanPostProcessor而言,它是属于PriorityOrdered的范畴,优先被注册,我们来看一下他的构造器

public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter

implements MergedBeanDefinitionPostProcessor, PriorityOrdered, BeanFactoryAware {

…省略…

/**

  • Create a new AutowiredAnnotationBeanPostProcessor

  • for Spring’s standard {@link Autowired} annotation.

  • Also supports

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值