English: In PostProcessorRegistrationDelegate invokeBeanFactoryPostProcessors method, after the first phase of the spring BeanFactoryPostProcessor, appeared with orderedPostProcessorNames and PostProcessorName nonOrderedPostProcessorNames records, After iterating to get its BeanFactoryPostProcessor, a total of 4 LIst result sets and 2 loops can be used to process it with 2 LIst result sets to improve performance!
Chinese: 在PostProcessorRegistrationDelegate的invokeBeanFactoryPostProcessors方法中,执行完第一阶段的BeanFactoryPostProcessor,出现了用orderedPostProcessorNames和nonOrderedPostProcessorNames记录PostProcessorName,后面遍历获取其BeanFactoryPostProcessor,总共用了4个LIst结果集和2次循环,可以使用2次List结果集对其进行处理,提高性能!
Specific code:
```java code
List
// First, invoke the BeanFactoryPostProcessors that implement PriorityOrdered.
sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
invokeBeanFactoryPostProcessors(priorityOrderedPostProcessors, beanFactory);
// Next, invoke the BeanFactoryPostProcessors that implement Ordered.
// first loop
List<BeanFactoryPostProcessor> orderedPostProcessors = new ArrayList<>(orderedPostProcessorNames.size());
for (String postProcessorName : orderedPostProcessorNames) {
orderedPostProcessors.add(beanFactory.getBean(postProcessorName, BeanFactoryPostProcessor.class));
}
sortPostProcessors(orderedPostProcessors, beanFactory);
invokeBeanFactoryPostProcessors(orderedPostProcessors, beanFactory);
// Finally, invoke all other BeanFactoryPostProcessors.
// second loop
List<BeanFactoryPostProcessor> nonOrderedPostProcessors = new ArrayList<>(nonOrderedPostProcessorNames.size());
for (String postProcessorName : nonOrderedPostProcessorNames) {
nonOrderedPostProcessors.add(beanFactory.getBean(postProcessorName, BeanFactoryPostProcessor.class));
}
invokeBeanFactoryPostProcessors(nonOrderedPostProcessors, beanFactory);
```