|
|
|
|
@ -59,15 +59,14 @@ class PostProcessorRegistrationDelegate {
@@ -59,15 +59,14 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
if (beanFactory instanceof BeanDefinitionRegistry) { |
|
|
|
|
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory; |
|
|
|
|
List<BeanFactoryPostProcessor> regularPostProcessors = new LinkedList<>(); |
|
|
|
|
List<BeanDefinitionRegistryPostProcessor> registryPostProcessors = |
|
|
|
|
new LinkedList<>(); |
|
|
|
|
List<BeanDefinitionRegistryPostProcessor> registryProcessors = new LinkedList<>(); |
|
|
|
|
|
|
|
|
|
for (BeanFactoryPostProcessor postProcessor : beanFactoryPostProcessors) { |
|
|
|
|
if (postProcessor instanceof BeanDefinitionRegistryPostProcessor) { |
|
|
|
|
BeanDefinitionRegistryPostProcessor registryPostProcessor = |
|
|
|
|
BeanDefinitionRegistryPostProcessor registryProcessor = |
|
|
|
|
(BeanDefinitionRegistryPostProcessor) postProcessor; |
|
|
|
|
registryPostProcessor.postProcessBeanDefinitionRegistry(registry); |
|
|
|
|
registryPostProcessors.add(registryPostProcessor); |
|
|
|
|
registryProcessor.postProcessBeanDefinitionRegistry(registry); |
|
|
|
|
registryProcessors.add(registryProcessor); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
regularPostProcessors.add(postProcessor); |
|
|
|
|
@ -78,33 +77,34 @@ class PostProcessorRegistrationDelegate {
@@ -78,33 +77,34 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
// uninitialized to let the bean factory post-processors apply to them!
|
|
|
|
|
// Separate between BeanDefinitionRegistryPostProcessors that implement
|
|
|
|
|
// PriorityOrdered, Ordered, and the rest.
|
|
|
|
|
String[] postProcessorNames = |
|
|
|
|
beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false); |
|
|
|
|
List<BeanDefinitionRegistryPostProcessor> currentRegistryProcessors = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
// First, invoke the BeanDefinitionRegistryPostProcessors that implement PriorityOrdered.
|
|
|
|
|
List<BeanDefinitionRegistryPostProcessor> priorityOrderedPostProcessors = new ArrayList<>(); |
|
|
|
|
String[] postProcessorNames = |
|
|
|
|
beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false); |
|
|
|
|
for (String ppName : postProcessorNames) { |
|
|
|
|
if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) { |
|
|
|
|
priorityOrderedPostProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class)); |
|
|
|
|
currentRegistryProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class)); |
|
|
|
|
processedBeans.add(ppName); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
sortPostProcessors(beanFactory, priorityOrderedPostProcessors); |
|
|
|
|
registryPostProcessors.addAll(priorityOrderedPostProcessors); |
|
|
|
|
invokeBeanDefinitionRegistryPostProcessors(priorityOrderedPostProcessors, registry); |
|
|
|
|
sortPostProcessors(currentRegistryProcessors, beanFactory); |
|
|
|
|
registryProcessors.addAll(currentRegistryProcessors); |
|
|
|
|
invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry); |
|
|
|
|
currentRegistryProcessors.clear(); |
|
|
|
|
|
|
|
|
|
// Next, invoke the BeanDefinitionRegistryPostProcessors that implement Ordered.
|
|
|
|
|
postProcessorNames = beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false); |
|
|
|
|
List<BeanDefinitionRegistryPostProcessor> orderedPostProcessors = new ArrayList<>(); |
|
|
|
|
for (String ppName : postProcessorNames) { |
|
|
|
|
if (!processedBeans.contains(ppName) && beanFactory.isTypeMatch(ppName, Ordered.class)) { |
|
|
|
|
orderedPostProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class)); |
|
|
|
|
currentRegistryProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class)); |
|
|
|
|
processedBeans.add(ppName); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
sortPostProcessors(beanFactory, orderedPostProcessors); |
|
|
|
|
registryPostProcessors.addAll(orderedPostProcessors); |
|
|
|
|
invokeBeanDefinitionRegistryPostProcessors(orderedPostProcessors, registry); |
|
|
|
|
sortPostProcessors(currentRegistryProcessors, beanFactory); |
|
|
|
|
registryProcessors.addAll(currentRegistryProcessors); |
|
|
|
|
invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry); |
|
|
|
|
currentRegistryProcessors.clear(); |
|
|
|
|
|
|
|
|
|
// Finally, invoke all other BeanDefinitionRegistryPostProcessors until no further ones appear.
|
|
|
|
|
boolean reiterate = true; |
|
|
|
|
@ -113,17 +113,19 @@ class PostProcessorRegistrationDelegate {
@@ -113,17 +113,19 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
postProcessorNames = beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false); |
|
|
|
|
for (String ppName : postProcessorNames) { |
|
|
|
|
if (!processedBeans.contains(ppName)) { |
|
|
|
|
BeanDefinitionRegistryPostProcessor pp = beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class); |
|
|
|
|
registryPostProcessors.add(pp); |
|
|
|
|
currentRegistryProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class)); |
|
|
|
|
processedBeans.add(ppName); |
|
|
|
|
pp.postProcessBeanDefinitionRegistry(registry); |
|
|
|
|
reiterate = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
sortPostProcessors(currentRegistryProcessors, beanFactory); |
|
|
|
|
registryProcessors.addAll(currentRegistryProcessors); |
|
|
|
|
invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry); |
|
|
|
|
currentRegistryProcessors.clear(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Now, invoke the postProcessBeanFactory callback of all processors handled so far.
|
|
|
|
|
invokeBeanFactoryPostProcessors(registryPostProcessors, beanFactory); |
|
|
|
|
invokeBeanFactoryPostProcessors(registryProcessors, beanFactory); |
|
|
|
|
invokeBeanFactoryPostProcessors(regularPostProcessors, beanFactory); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -158,7 +160,7 @@ class PostProcessorRegistrationDelegate {
@@ -158,7 +160,7 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// First, invoke the BeanFactoryPostProcessors that implement PriorityOrdered.
|
|
|
|
|
sortPostProcessors(beanFactory, priorityOrderedPostProcessors); |
|
|
|
|
sortPostProcessors(priorityOrderedPostProcessors, beanFactory); |
|
|
|
|
invokeBeanFactoryPostProcessors(priorityOrderedPostProcessors, beanFactory); |
|
|
|
|
|
|
|
|
|
// Next, invoke the BeanFactoryPostProcessors that implement Ordered.
|
|
|
|
|
@ -166,7 +168,7 @@ class PostProcessorRegistrationDelegate {
@@ -166,7 +168,7 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
for (String postProcessorName : orderedPostProcessorNames) { |
|
|
|
|
orderedPostProcessors.add(beanFactory.getBean(postProcessorName, BeanFactoryPostProcessor.class)); |
|
|
|
|
} |
|
|
|
|
sortPostProcessors(beanFactory, orderedPostProcessors); |
|
|
|
|
sortPostProcessors(orderedPostProcessors, beanFactory); |
|
|
|
|
invokeBeanFactoryPostProcessors(orderedPostProcessors, beanFactory); |
|
|
|
|
|
|
|
|
|
// Finally, invoke all other BeanFactoryPostProcessors.
|
|
|
|
|
@ -215,7 +217,7 @@ class PostProcessorRegistrationDelegate {
@@ -215,7 +217,7 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// First, register the BeanPostProcessors that implement PriorityOrdered.
|
|
|
|
|
sortPostProcessors(beanFactory, priorityOrderedPostProcessors); |
|
|
|
|
sortPostProcessors(priorityOrderedPostProcessors, beanFactory); |
|
|
|
|
registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors); |
|
|
|
|
|
|
|
|
|
// Next, register the BeanPostProcessors that implement Ordered.
|
|
|
|
|
@ -227,7 +229,7 @@ class PostProcessorRegistrationDelegate {
@@ -227,7 +229,7 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
internalPostProcessors.add(pp); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
sortPostProcessors(beanFactory, orderedPostProcessors); |
|
|
|
|
sortPostProcessors(orderedPostProcessors, beanFactory); |
|
|
|
|
registerBeanPostProcessors(beanFactory, orderedPostProcessors); |
|
|
|
|
|
|
|
|
|
// Now, register all regular BeanPostProcessors.
|
|
|
|
|
@ -242,7 +244,7 @@ class PostProcessorRegistrationDelegate {
@@ -242,7 +244,7 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors); |
|
|
|
|
|
|
|
|
|
// Finally, re-register all internal BeanPostProcessors.
|
|
|
|
|
sortPostProcessors(beanFactory, internalPostProcessors); |
|
|
|
|
sortPostProcessors(internalPostProcessors, beanFactory); |
|
|
|
|
registerBeanPostProcessors(beanFactory, internalPostProcessors); |
|
|
|
|
|
|
|
|
|
// Re-register post-processor for detecting inner beans as ApplicationListeners,
|
|
|
|
|
@ -250,7 +252,7 @@ class PostProcessorRegistrationDelegate {
@@ -250,7 +252,7 @@ class PostProcessorRegistrationDelegate {
|
|
|
|
|
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void sortPostProcessors(ConfigurableListableBeanFactory beanFactory, List<?> postProcessors) { |
|
|
|
|
private static void sortPostProcessors(List<?> postProcessors, ConfigurableListableBeanFactory beanFactory) { |
|
|
|
|
Comparator<Object> comparatorToUse = null; |
|
|
|
|
if (beanFactory instanceof DefaultListableBeanFactory) { |
|
|
|
|
comparatorToUse = ((DefaultListableBeanFactory) beanFactory).getDependencyComparator(); |
|
|
|
|
|