
本文共 13822 字,大约阅读时间需要 46 分钟。
������������������
��� ���������������������������������������������������JAR������������������������������������������������������������������������������������������������������������������������������JAR������������������������������������������������������������������������������BEAN������������������������������������������������������������������������������������������BEAN���������������������������������BEAN���������������������������������������������������������������������������������
������������������������
��� ���������������������������������������������������������BEAN������������������������������@Compent���������������������������������BEAN������������������������BeanDefinitionRegistryPostProcessor BEAN���������������������BEAN���������BEAN���������������������������������������������������������������������������BeanDefinitionRegistryPostProcessor BEAN���������postProcessBeanDefinitionRegistry������������������������������BEAN������������������������������������������BEAN���������������BeanDefinition���������������������BEAN������������������������������������������������������BEAN���������������������������������������������������������������������OK���������������������������������BEAN������������������������������������������������������������������������BeanDefinitionRegistryPostProcessor BEAN���������������������������������������BEAN������������BeanDefinitionRegistryPostProcessor BEAN���������������������������������������������������������BeanDefinitionRegistryPostProcessor BEAN���postProcessBeanDefinitionRegistry���������������������������������BEAN���������������BeanDefinition������������������������������������������������������������������������������������������������
���������������������������������������
��� ������������������������������������������������������BeanDefinitionRegistryPostProcessor ���������������������Bean������������������������������������������������������������������������BEAN������������BeanDefinitionRegistryPostProcessor BEAN������������OldBeanDefinitionRegistryPostProcessor���������������������������������������������������������������������������Bean���BeanDefinition,���������������������������BeanDefinition���������������������������������Bean������������������������������������Bean������������������������������������������������������������������������������������������������������������������������������������������������������������AOP���������������������������������������@Around������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������protected���������������������������BEAN������������������������������������������������������������������������������BEAN���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������AOP���������������������������������������������������������������������������������������������������������������������������������������������
���������������������������������������������������������������������BeanDefinitionRegistryPostProcessor ���������������������Bean���������������������������������������
���������������������
������������������������������������������BeanDefinitionRegistryPostProcessor ���BEAN������������������������������������������PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors���������������������BeanDefinitionRegistryPostProcessor BEAN������������������������BEAN������������������������������������������������������������������������������������������������������������������BeanDefinitionRegistryPostProcessor BEAN������������������������������������������������������������������
boolean reiterate = true; while (reiterate) { reiterate = false; postProcessorNames = beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false); for (String ppName : postProcessorNames) { if (!processedBeans.contains(ppName)) { currentRegistryProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class)); processedBeans.add(ppName); reiterate = true; } } sortPostProcessors(currentRegistryProcessors, beanFactory); registryProcessors.addAll(currentRegistryProcessors); invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry); currentRegistryProcessors.clear(); }
���������������������������
//������������������������������BeanDefinitionRegistryPostProcessor BEAN������������������������������������BEAN������NewBeanDefinitionRegistryPostProcessor BEAN//author:zuowenjun@Componentpublic class FirstDynamicBeanPostProcessor implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException { BeanDefinitionBuilder beanDefinitionBuilder=BeanDefinitionBuilder.genericBeanDefinition(NewBeanDefinitionRegistryPostProcessor.class);beanDefinitionRegistry.registerBeanDefinition("newBeanDefinitionRegistryPostProcessor",beanDefinitionBuilder.getBeanDefinition()); System.out.printf("���%1$tF %1$tT.%1$tL���%s,FirstDynamicBeanPostProcessor.postProcessBeanDefinitionRegistry%n", new Date()); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { System.out.printf("���%1$tF %1$tT.%1$tL���%s,FirstDynamicBeanPostProcessor.postProcessBeanFactory%n", new Date()); }}//���������������������������Bean���������������������������������Bean(���������������������������������������������������)public class NewBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException { System.out.printf("���%1$tF %1$tT.%1$tL���%s,NewBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry%n",new Date()); boolean isContainsSpecialBean = ((DefaultListableBeanFactory) beanDefinitionRegistry).containsBean("old������Bean������"); if (isContainsSpecialBean) { beanDefinitionRegistry.removeBeanDefinition("old������Bean������"); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(DemoCompentB.class); beanDefinitionBuilder.addConstructorArgValue(((DefaultListableBeanFactory) beanDefinitionRegistry).getBean(NewBeanAdapter.class)); //NewBeanAdapter������������old������Bean��������������������������� AbstractBeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition(); beanDefinition.setPrimary(true); beanDefinitionRegistry.registerBeanDefinition("old������Bean������", beanDefinition); } } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { System.out.printf("���%1$tF %1$tT.%1$tL���%s,NewBeanDefinitionRegistryPostProcessor.postProcessBeanFactory%n",new Date()); }}
������������������������������(������������NewBeanDefinitionRegistryPostProcessor������OldBeanDefinitionRegistryPostProcessor���������������������������������������������Bean���������)
FirstDynamicBeanPostProcessor.postProcessBeanDefinitionRegistry (���������)
OldBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry (���������)
NewBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry ���������������
FirstDynamicBeanPostProcessor.postProcessBeanFactory
OldBeanDefinitionRegistryPostProcessor.postProcessBeanFactory
NewBeanDefinitionRegistryPostProcessor.postProcessBeanFactory
���������������������
������������������������������������BeanDefinitionRegistryPostProcessor BEAN���������PriorityOrdered���BeanFactoryAware������������������BEAN���������������(Order=0)������������postProcessBeanDefinitionRegistry���������������applicationContext.setDependencyComparator������������������������������������������BeanDefinitionRegistryPostProcessor BEAN���������������������������������������������������������������BeanDefinitionRegistryPostProcessor BEAN������������������sortPostProcessors
������������������������������������������������DependencyComparator������������������������������������������������������������������������������������������
private static void sortPostProcessors(List postProcessors, ConfigurableListableBeanFactory beanFactory) { Comparator
���������������������������
@Component public static class FirstBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor, PriorityOrdered , BeanFactoryAware { private BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory=beanFactory; } @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException { ((DefaultListableBeanFactory) beanFactory).setDependencyComparator(new OrderComparator(){ @Override protected int getOrder(Object obj) { if (obj instanceof NewBeanDefinitionRegistryPostProcessor){ //���������NewBeanDefinitionRegistryPostProcessor��������������������������������������� return Integer.MAX_VALUE; } return super.getOrder(obj)-1; //������������������������������1 } }); System.out.printf("���%1$tF %1$tT.%1$tL���%s,FirstBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry%n", new Date()); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { System.out.printf("���%1$tF %1$tT.%1$tL���%s,FirstBeanDefinitionRegistryPostProcessor.postProcessBeanFactory%n", new Date()); } @Override public int getOrder() { return 0;//������ } }
���������������������������������NewBeanDefinitionRegistryPostProcessor���OldBeanDefinitionRegistryPostProcessor���������������
FirstBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry ������1������������PriorityOrdered���������
OldBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry ������3������������BEAN���������
NewBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry ������3������������BEAN���������
FirstBeanDefinitionRegistryPostProcessor.postProcessBeanFactory
OldBeanDefinitionRegistryPostProcessor.postProcessBeanFactory
NewBeanDefinitionRegistryPostProcessor.postProcessBeanFactory
���������������������
���������������������������DeferredImportSelector������������@Import���������������NewBeanDefinitionRegistryPostProcessor������������������������BEAN������������������������������������������������������������������DeferredImportSelector���������������������������@Configuration
������bean���������������
���������������������������
public static class BeansImportSelector implements DeferredImportSelector { @Override public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[]{NewBeanDefinitionRegistryPostProcessor.class.getName()}; } }@Configuration@Import(BeansImportSelector.class)public class BeansConfig { }
���������������������������������NewBeanDefinitionRegistryPostProcessor���OldBeanDefinitionRegistryPostProcessor���������������
OldBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry
NewBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry
OldBeanDefinitionRegistryPostProcessor.postProcessBeanFactory
NewBeanDefinitionRegistryPostProcessor.postProcessBeanFactory
���������������������
������������������������������������������������������������������������������������������������������������������������������������������������������������������DependencyComparator���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BEAN������������������PriorityOrdered���Order���������������@Order������������������������������������������������������������������������������������������������������������������������������Order���������������������������������������������������������������
@Componentpublic class OldBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor,Order { @Override public int getOrder() { return 100; } ...}@Componentpublic class NewBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor,Order { @Override public int getOrder() { return 101;//���������������OldBeanDefinitionRegistryPostProcessor.getOrder������������ } ...}
发表评论
最新留言
关于作者
