Consistent support for @Order annotation as alternative to Ordered interface
Issue: SPR-12806
This commit is contained in:
@@ -18,6 +18,8 @@ package org.springframework.context.support;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@@ -35,6 +37,7 @@ import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||
import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
@@ -90,7 +93,7 @@ class PostProcessorRegistrationDelegate {
|
||||
processedBeans.add(ppName);
|
||||
}
|
||||
}
|
||||
OrderComparator.sort(priorityOrderedPostProcessors);
|
||||
sortPostProcessors(beanFactory, priorityOrderedPostProcessors);
|
||||
registryPostProcessors.addAll(priorityOrderedPostProcessors);
|
||||
invokeBeanDefinitionRegistryPostProcessors(priorityOrderedPostProcessors, registry);
|
||||
|
||||
@@ -103,7 +106,7 @@ class PostProcessorRegistrationDelegate {
|
||||
processedBeans.add(ppName);
|
||||
}
|
||||
}
|
||||
OrderComparator.sort(orderedPostProcessors);
|
||||
sortPostProcessors(beanFactory, orderedPostProcessors);
|
||||
registryPostProcessors.addAll(orderedPostProcessors);
|
||||
invokeBeanDefinitionRegistryPostProcessors(orderedPostProcessors, registry);
|
||||
|
||||
@@ -159,7 +162,7 @@ class PostProcessorRegistrationDelegate {
|
||||
}
|
||||
|
||||
// First, invoke the BeanFactoryPostProcessors that implement PriorityOrdered.
|
||||
OrderComparator.sort(priorityOrderedPostProcessors);
|
||||
sortPostProcessors(beanFactory, priorityOrderedPostProcessors);
|
||||
invokeBeanFactoryPostProcessors(priorityOrderedPostProcessors, beanFactory);
|
||||
|
||||
// Next, invoke the BeanFactoryPostProcessors that implement Ordered.
|
||||
@@ -167,7 +170,7 @@ class PostProcessorRegistrationDelegate {
|
||||
for (String postProcessorName : orderedPostProcessorNames) {
|
||||
orderedPostProcessors.add(beanFactory.getBean(postProcessorName, BeanFactoryPostProcessor.class));
|
||||
}
|
||||
OrderComparator.sort(orderedPostProcessors);
|
||||
sortPostProcessors(beanFactory, orderedPostProcessors);
|
||||
invokeBeanFactoryPostProcessors(orderedPostProcessors, beanFactory);
|
||||
|
||||
// Finally, invoke all other BeanFactoryPostProcessors.
|
||||
@@ -212,7 +215,7 @@ class PostProcessorRegistrationDelegate {
|
||||
}
|
||||
|
||||
// First, register the BeanPostProcessors that implement PriorityOrdered.
|
||||
OrderComparator.sort(priorityOrderedPostProcessors);
|
||||
sortPostProcessors(beanFactory, priorityOrderedPostProcessors);
|
||||
registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
|
||||
|
||||
// Next, register the BeanPostProcessors that implement Ordered.
|
||||
@@ -224,7 +227,7 @@ class PostProcessorRegistrationDelegate {
|
||||
internalPostProcessors.add(pp);
|
||||
}
|
||||
}
|
||||
OrderComparator.sort(orderedPostProcessors);
|
||||
sortPostProcessors(beanFactory, orderedPostProcessors);
|
||||
registerBeanPostProcessors(beanFactory, orderedPostProcessors);
|
||||
|
||||
// Now, register all regular BeanPostProcessors.
|
||||
@@ -239,12 +242,23 @@ class PostProcessorRegistrationDelegate {
|
||||
registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);
|
||||
|
||||
// Finally, re-register all internal BeanPostProcessors.
|
||||
OrderComparator.sort(internalPostProcessors);
|
||||
sortPostProcessors(beanFactory, internalPostProcessors);
|
||||
registerBeanPostProcessors(beanFactory, internalPostProcessors);
|
||||
|
||||
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));
|
||||
}
|
||||
|
||||
private static void sortPostProcessors(ConfigurableListableBeanFactory beanFactory, List<?> postProcessors) {
|
||||
Comparator<Object> comparatorToUse = null;
|
||||
if (beanFactory instanceof DefaultListableBeanFactory) {
|
||||
comparatorToUse = ((DefaultListableBeanFactory) beanFactory).getDependencyComparator();
|
||||
}
|
||||
if (comparatorToUse == null) {
|
||||
comparatorToUse = OrderComparator.INSTANCE;
|
||||
}
|
||||
Collections.sort(postProcessors, comparatorToUse);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoke the given BeanDefinitionRegistryPostProcessor beans.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user