private void registerBeanPostProcessors()

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