in gshell-support/gshell-spring/src/main/java/org/apache/geronimo/gshell/spring/BeanContainerContextSupport.java [198:247]
private void invokeBeanFactoryPostProcessors(final ConfigurableListableBeanFactory beanFactory) {
assert beanFactory != null;
// Invoke factory processors registered with the context instance.
for (BeanFactoryPostProcessor factoryProcessor : beanFactoryPostProcessors) {
factoryProcessor.postProcessBeanFactory(beanFactory);
}
// Do not initialize FactoryBeans here: We need to leave all regular beans
// uninitialized to let the bean factory post-processors apply to them!
String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanFactoryPostProcessor.class, true, false);
// Separate between BeanFactoryPostProcessors that implement PriorityOrdered, Ordered, and the rest.
List<BeanFactoryPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanFactoryPostProcessor>();
List<String> orderedPostProcessorNames = new ArrayList<String>();
List<String> nonOrderedPostProcessorNames = new ArrayList<String>();
for (String name : postProcessorNames) {
if (isTypeMatch(name, PriorityOrdered.class)) {
priorityOrderedPostProcessors.add((BeanFactoryPostProcessor) beanFactory.getBean(name));
}
else if (isTypeMatch(name, Ordered.class)) {
orderedPostProcessorNames.add(name);
}
else {
nonOrderedPostProcessorNames.add(name);
}
}
// First, invoke the BeanFactoryPostProcessors that implement PriorityOrdered.
// noinspection unchecked
Collections.sort(priorityOrderedPostProcessors, new OrderComparator());
invokeBeanFactoryPostProcessors(beanFactory, priorityOrderedPostProcessors);
// Next, invoke the BeanFactoryPostProcessors that implement Ordered.
List<BeanFactoryPostProcessor> orderedPostProcessors = new ArrayList<BeanFactoryPostProcessor>();
for (String name : orderedPostProcessorNames) {
orderedPostProcessors.add((BeanFactoryPostProcessor) getBean(name));
}
// noinspection unchecked
Collections.sort(orderedPostProcessors, new OrderComparator());
invokeBeanFactoryPostProcessors(beanFactory, orderedPostProcessors);
// Finally, invoke all other BeanFactoryPostProcessors.
List<BeanFactoryPostProcessor> nonOrderedPostProcessors = new ArrayList<BeanFactoryPostProcessor>();
for (String name : nonOrderedPostProcessorNames) {
nonOrderedPostProcessors.add((BeanFactoryPostProcessor) getBean(name));
}
invokeBeanFactoryPostProcessors(beanFactory, nonOrderedPostProcessors);
}