对于PostProcessorRegistrationDelegate的解析,请参考如下
Spring中PostProcessorRegistrationDelegate类中beanFactory.getBeanNamesForType()的4次调用
这里列出一些事例出来。
//MyBeanDefinitionRegistryPostProcessor1.java
package sping.analysis.postprocessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.stereotype.Component;
/**
* 优先执行postProcessBeanDefinitionRegistry
* 等所有的postProcessBeanDefinitionRegistry执行完之后,再执行postProcessBeanFactory
*
* @author slHuang
* @since 2019-02-11
*/
@Component
public class MyBeanDefinitionRegistryPostProcessor1 implements BeanDefinitionRegistryPostProcessor {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println(this.getClass().getName() + ".postProcessBeanFactory() 被调用了...");
}
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
System.out.println("没有实现 Ordered 接口的最后调用。");
System.out.println(this.getClass().getName() + ".postProcessBeanDefinitionRegistry()被调用了...");
}
}
//MyBeanDefinitionRegistryPostProcessor2.java
package sping.analysis.postprocessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
@Component
public class MyBeanDefinitionRegistryPostProcessor2 implements BeanDefinitionRegistryPostProcessor, Ordered {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println(this.getClass().getName() + ".postProcessBeanFactory(Ordered=1)被调用了...");
}
/**
* Order越小,越优先执行
*/
public int getOrder() {
return 1;
}
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
System.out.println(this.getClass().getName() + ".postProcessBeanDefinitionRegistry(Ordered=1)被调用了...");
}
}
//MyBeanDefinitionRegistryPostProcessor3.java
package sping.analysis.postprocessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
@Component
public class MyBeanDefinitionRegistryPostProcessor3 implements BeanDefinitionRegistryPostProcessor, Ordered {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println(this.getClass().getName() + ".postProcessBeanFactory(Ordered=0)被调用了...");
}
/**
* Order越小,越优先执行
*/
public int getOrder() {
return 0;
}
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
System.out.println("order值越小,越优先调用。");
System.out.println(this.getClass().getName() + ".postProcessBeanDefinitionRegistry(Ordered=0)被调用了...");
}
}
//MyBeanDefinitionRegistryPostProcessor4.java
package sping.analysis.postprocessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.core.PriorityOrdered;
import org.springframework.stereotype.Component;
/**
* 实现了PriorityOrdered接口的优先调用.
* 先于实现了Ordered接口
*
* @author slHuang
* @since 2019-02-11
*/
@Component
public class MyBeanDefinitionRegistryPostProcessor4 implements BeanDefinitionRegistryPostProcessor, PriorityOrdered {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println(this.getClass().getName() + ".postProcessBeanFactory()被调用了...");
}
/**
* Order越小,越优先执行
*/
public int getOrder() {
return 0;
}
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
System.out.println("实现了PriorityOrdered接口的优先调用.");
System.out.println(this.getClass().getName() + ".postProcessBeanDefinitionRegistry()被调用了...");
}
}
//MyBeanFactoryPostProcessor1.java
package sping.analysis.postprocessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;
/**
* BeanFactoryPostProcessor用于在BeanFactory实例化完成之后,
* 再做的增强处理
* 而BeanDefinitionRegistoryPostProcessor用于在BeanDefinition注册完成之后,
* 再做的增强处理
*
* 实现了BeanFactoryPostProcessor接口的,
* 要晚于实现了BeanDefinitionRegistryPostProcessor接口的被调用
*
* @author slHuang
* @since 2019-02-11
*/
@Component
public class MyBeanFactoryPostProcessor1 implements BeanFactoryPostProcessor {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println(this.getClass().getName() + ".postProcessBeanFactory() 被调用 了...");
}
}
//MyBeanFactoryPostProcessor2.java
package sping.analysis.postprocessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
/**
* BeanFactoryPostProcessor用于在BeanFactory实例化完成之后,
* 再做的增强处理
* 而BeanDefinitionRegistoryPostProcessor用于在BeanDefinition注册完成之后,
* 再做的增强处理
*
* 实现了BeanFactoryPostProcessor接口的,
* 要晚于实现了BeanDefinitionRegistryPostProcessor接口的被调用
*
* @author slHuang
* @since 2019-02-11
*/
@Component
public class MyBeanFactoryPostProcessor2 implements BeanFactoryPostProcessor, Ordered {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println(this.getClass().getName() + ".postProcessBeanFactory(Order=1) 被调用 了...");
}
public int getOrder() {
return 1;
}
}
//MyBeanFactoryPostProcessor3.java
package sping.analysis.postprocessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
/**
* BeanFactoryPostProcessor用于在BeanFactory实例化完成之后,
* 再做的增强处理
* 而BeanDefinitionRegistoryPostProcessor用于在BeanDefinition注册完成之后,
* 再做的增强处理
*
* 实现了BeanFactoryPostProcessor接口的,
* 要晚于实现了BeanDefinitionRegistryPostProcessor接口的被调用
*
* Order值越小,越优先调用
*
* @author slHuang
* @since 2019-02-11
*/
@Component
public class MyBeanFactoryPostProcessor3 implements BeanFactoryPostProcessor, Ordered {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("Order值越小越优先调用。");
System.out.println(this.getClass().getName() + ".postProcessBeanFactory(Order=0) 被调用 了...");
}
public int getOrder() {
return 0;
}
}
//MyBeanFactoryPostProcessor4.java
package sping.analysis.postprocessor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.core.Ordered;
import org.springframework.core.PriorityOrdered;
import org.springframework.stereotype.Component;
/**
* BeanFactoryPostProcessor用于在BeanFactory实例化完成之后,
* 再做的增强处理
* 而BeanDefinitionRegistoryPostProcessor用于在BeanDefinition注册完成之后,
* 再做的增强处理
*
* 实现了BeanFactoryPostProcessor接口的,
* 要晚于实现了BeanDefinitionRegistryPostProcessor接口的被调用
*
* 实现了PriorityOrdered接口的优先调用.
* 先于实现了Ordered接口
*
* @author slHuang
* @since 2019-02-11
*/
@Component
public class MyBeanFactoryPostProcessor4 implements BeanFactoryPostProcessor, PriorityOrdered{
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("实现BeanFactoryPostProcessor接口,晚于实现了BeanDefinitionRegistryPostProcessor接口调用。");
System.out.println("实现了PriorityOrdered接口的优+先调用。");
System.out.println(this.getClass().getName() + ".postProcessBeanFactory() 被调用 了...");
}
public int getOrder() {
return 0;
}
}
执行的结果如下:
实现了PriorityOrdered接口的优先调用.
sping.analysis.postprocessor.MyBeanDefinitionRegistryPostProcessor4.postProcessBeanDefinitionRegistry()被调用了...
order值越小,越优先调用。
sping.analysis.postprocessor.MyBeanDefinitionRegistryPostProcessor3.postProcessBeanDefinitionRegistry(Ordered=0)被调用了...
sping.analysis.postprocessor.MyBeanDefinitionRegistryPostProcessor2.postProcessBeanDefinitionRegistry(Ordered=1)被调用了...
没有实现 Ordered 接口的最后调用。
sping.analysis.postprocessor.MyBeanDefinitionRegistryPostProcessor1.postProcessBeanDefinitionRegistry()被调用了...
sping.analysis.postprocessor.MyBeanDefinitionRegistryPostProcessor4.postProcessBeanFactory()被调用了...
sping.analysis.postprocessor.MyBeanDefinitionRegistryPostProcessor3.postProcessBeanFactory(Ordered=0)被调用了...
sping.analysis.postprocessor.MyBeanDefinitionRegistryPostProcessor2.postProcessBeanFactory(Ordered=1)被调用了...
sping.analysis.postprocessor.MyBeanDefinitionRegistryPostProcessor1.postProcessBeanFactory() 被调用了...
实现BeanFactoryPostProcessor接口,晚于实现了BeanDefinitionRegistryPostProcessor接口调用。
实现了PriorityOrdered接口的优先调用。
sping.analysis.postprocessor.MyBeanFactoryPostProcessor4.postProcessBeanFactory() 被调用 了...
Order值越小越优先调用。
sping.analysis.postprocessor.MyBeanFactoryPostProcessor3.postProcessBeanFactory(Order=0) 被调用 了...
sping.analysis.postprocessor.MyBeanFactoryPostProcessor2.postProcessBeanFactory(Order=1) 被调用 了...
sping.analysis.postprocessor.MyBeanFactoryPostProcessor1.postProcessBeanFactory() 被调用 了...```