/**
* 注册BeanPostProcessor
*/
protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory) {
//注册BeanPostProcessor
PostProcessorRegistrationDelegate.registerBeanPostProcessors(beanFactory, this);
}
继续向下
/**
* 注册所有的BeanPostProcessor
* 顺序:
* 1.实现PriorityOrdered接口的
* 2.实现order接口的
* 3.其他的
* 4.实现MergedBeanDefinitionPostProcessor接口的 spring内部的BeanPostProcessor会实现这个接口
* 前面注册的时候也会注册这些BeanPostProcessor,最后会重新注册一次,重新注册会放到最后
* 5.注册ApplicationListenerDetector 放到最后
*/
public static void registerBeanPostProcessors(
ConfigurableListableBeanFactory beanFactory, AbstractApplicationContext applicationContext) {
//找出所有实现BeanPostProcessor接口的类
String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
// BeanPostProcessor的目标计数
int beanProcessorTargetCount = beanFactory.getBeanPostProcessorCount() + 1 + postProcessorNames.length;
//添加BeanPostProcessorChecker(主要用于记录信息)到beanFactory中
beanFactory.addBeanPostProcessor(new BeanPostProcessorChecker(beanFactory, beanProcessorTargetCount));
// 定义不同的变量用于区分: 实现PriorityOrdered接口的BeanPostProcessor、
// 实现Ordered接口的BeanPostProcessor、普通BeanPostProcessor
List<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<>();//用于存放实现PriorityOrdered接口的BeanPostProcessor
List<BeanPostProcessor> internalPostProcessors = new ArrayList<>();//用于存放Spring内部的BeanPostProcessor
List<String> orderedPostProcessorNames = new ArrayList<>();//用于存放实现Ordered接口的BeanPostProcessor的beanName
List<String> nonOrderedPostProcessorNames = new ArrayList<>();//用于存放普通BeanPostProcessor的beanName
for (String ppName : postProcessorNames) { //遍历分类
if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) { //PriorityOrdered
BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
priorityOrderedPostProcessors.add(pp); //添加到priorityOrderedPostProcessors
if (pp instanceof MergedBeanDefinitionPostProcessor) { //spring内部的
internalPostProcessors.add(pp); //添加到internalPostProcessors
}
}
else if (beanFactory.isTypeMatch(ppName, Ordered.class)) { //Ordered
orderedPostProcessorNames.add(ppName); //添加到orderedPostProcessorNames
}
else { //其他的
nonOrderedPostProcessorNames.add(ppName); //添加到nonOrderedPostProcessorNames
}
}
// 对实现PriorityOrdered的 进行排序
sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
//全部添加到beanFactory中 beanFactory.addBeanPostProcessor
registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
// 注册实现Ordered接口的BeanPostProcessors
List<BeanPostProcessor> orderedPostProcessors = new ArrayList<>(orderedPostProcessorNames.size());
for (String ppName : orderedPostProcessorNames) {
//拿到ppName对应的BeanPostProcessor实例对象
BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
orderedPostProcessors.add(pp);//添加到orderedPostProcessors, 准备执行注册
if (pp instanceof MergedBeanDefinitionPostProcessor) {
//如果ppName对应的Bean实例也实现了MergedBeanDefinitionPostProcessor接口 则将ppName对应的Bean实例添加到internalPostProcessors
internalPostProcessors.add(pp);
}
}
// 对实现Ordered的 进行排序
sortPostProcessors(orderedPostProcessors, beanFactory);
//全部添加到beanFactory中 beanFactory.addBeanPostProcessor
registerBeanPostProcessors(beanFactory, orderedPostProcessors);
// 注册所有常规的BeanPostProcessors
List<BeanPostProcessor> nonOrderedPostProcessors = new ArrayList<>(nonOrderedPostProcessorNames.size());
for (String ppName : nonOrderedPostProcessorNames) {
BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
nonOrderedPostProcessors.add(pp); //添加
if (pp instanceof MergedBeanDefinitionPostProcessor) {
internalPostProcessors.add(pp); //添加
}
}
//全部添加到beanFactory中 beanFactory.addBeanPostProcessor
registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);
// 注册所有内部BeanPostProcessors(实现MergedBeanDefinitionPostProcessor接口的)放到最后
//排序
sortPostProcessors(internalPostProcessors, beanFactory);
//全部添加到beanFactory中 beanFactory.addBeanPostProcessor
registerBeanPostProcessors(beanFactory, internalPostProcessors);
// 注册ApplicationListenerDetector 放到最后
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));
}
排序与注册方法
private static void sortPostProcessors(List<?> postProcessors, ConfigurableListableBeanFactory beanFactory) {
Comparator<Object> comparatorToUse = null;
if (beanFactory instanceof DefaultListableBeanFactory) {
// 1.获取设置的比较器
comparatorToUse = ((DefaultListableBeanFactory) beanFactory).getDependencyComparator();
}
if (comparatorToUse == null) {
// 2.如果没有设置比较器, 则使用默认的OrderComparator
comparatorToUse = OrderComparator.INSTANCE;
}
// 3.使用比较器对postProcessors进行排序
postProcessors.sort(comparatorToUse);
}
/**
* 遍历添加BeanPostProcessor
*/
private static void registerBeanPostProcessors(
ConfigurableListableBeanFactory beanFactory, List<BeanPostProcessor> postProcessors) {
for (BeanPostProcessor postProcessor : postProcessors) {
beanFactory.addBeanPostProcessor(postProcessor);
}
}
/**
* 添加BeanPostProcessor
* 先移除之后再添加,顺序会放到最后
*/
@Override
public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
Assert.notNull(beanPostProcessor, "BeanPostProcessor must not be null");
this.beanPostProcessors.remove(beanPostProcessor); //先移除
if (beanPostProcessor instanceof InstantiationAwareBeanPostProcessor) {
this.hasInstantiationAwareBeanPostProcessors = true;
}
if (beanPostProcessor instanceof DestructionAwareBeanPostProcessor) {
this.hasDestructionAwareBeanPostProcessors = true;
}
this.beanPostProcessors.add(beanPostProcessor); //再添加
}