in gshell-support/gshell-spring/src/main/java/org/apache/geronimo/gshell/spring/BeanContainerContextSupport.java [258:308]
private void registerBeanPostProcessors(final ConfigurableListableBeanFactory beanFactory) {
assert beanFactory != null;
String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
// Register BeanPostProcessorChecker that logs an info message when
// a bean is created during BeanPostProcessor instantiation, i.e. when
// a bean is not eligible for getting processed by all BeanPostProcessors.
int beanProcessorTargetCount = beanFactory.getBeanPostProcessorCount() + 1 + postProcessorNames.length;
beanFactory.addBeanPostProcessor(new BeanPostProcessorChecker(beanFactory, beanProcessorTargetCount));
// Separate between BeanPostProcessors that implement PriorityOrdered, Ordered, and the rest.
List<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
List<String> orderedPostProcessorNames = new ArrayList<String>();
List<String> nonOrderedPostProcessorNames = new ArrayList<String>();
for (String name : postProcessorNames) {
if (isTypeMatch(name, PriorityOrdered.class)) {
priorityOrderedPostProcessors.add((BeanPostProcessor)beanFactory.getBean(name));
}
else if (isTypeMatch(name, Ordered.class)) {
orderedPostProcessorNames.add(name);
}
else {
nonOrderedPostProcessorNames.add(name);
}
}
// First, register the BeanPostProcessors that implement PriorityOrdered.
// noinspection unchecked
Collections.sort(priorityOrderedPostProcessors, new OrderComparator());
registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
// Next, register the BeanPostProcessors that implement Ordered.
List<BeanPostProcessor> orderedPostProcessors = new ArrayList<BeanPostProcessor>();
for (String name : orderedPostProcessorNames) {
orderedPostProcessors.add((BeanPostProcessor)getBean(name));
}
// noinspection unchecked
Collections.sort(orderedPostProcessors, new OrderComparator());
registerBeanPostProcessors(beanFactory, orderedPostProcessors);
// Finally, register all other BeanPostProcessors.
List<BeanPostProcessor> nonOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
for (String name : nonOrderedPostProcessorNames) {
nonOrderedPostProcessors.add((BeanPostProcessor)getBean(name));
}
registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);
}