private void invokeBeanFactoryPostProcessors()

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);
	}