BeanFactoryPostProcessor提供了用户对BeanDefinition中属性值修改的扩展可能,它在spring加载了BeanDefinition之后运行
@Component
public class Student{
private String name;
private String school;
public Student(){
System.out.println("Student.Student()");
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("Student.setName(), name="+name);
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
}
@Component
public class My1 implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("BeanFactoryPostProcessor postProcessBeanFactory()");
}
}
@Component
public class My2 implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor postProcessBeanFactory()");
}
@Override
public void postProcessBeanDefinitionRegistry(
BeanDefinitionRegistry registry) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry()");
}
}
@Component
public class My3 implements BeanDefinitionRegistryPostProcessor , PriorityOrdered{
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor,PriorityOrdered=0 postProcessBeanFactory()");
}
@Override
public void postProcessBeanDefinitionRegistry(
BeanDefinitionRegistry registry) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor,PriorityOrdered=0 postProcessBeanDefinitionRegistry()");
}
@Override
public int getOrder() {
return 0;
}
}
@Component
public class My4 implements BeanDefinitionRegistryPostProcessor , PriorityOrdered{
@Override
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor,PriorityOrdered=1 postProcessBeanFactory()");
}
@Override
public void postProcessBeanDefinitionRegistry(
BeanDefinitionRegistry registry) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor,PriorityOrdered=1 postProcessBeanDefinitionRegistry()");
BeanDefinition bd = registry.getBeanDefinition("student");
MutablePropertyValues v = bd.getPropertyValues();
v.add("name", "peter");
v.add("school", "changjiang");
}
@Override
public int getOrder() {
return 1;
}
}
@Component
public class My5 implements BeanDefinitionRegistryPostProcessor , Ordered{
@Override
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor,Ordered=0 postProcessBeanFactory()");
}
@Override
public void postProcessBeanDefinitionRegistry(
BeanDefinitionRegistry registry) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor,Ordered=0 postProcessBeanDefinitionRegistry()");
}
@Override
public int getOrder() {
return 0;
}
}
@Component
public class My6 implements BeanDefinitionRegistryPostProcessor , Ordered{
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor,Ordered=1 postProcessBeanFactory()");
}
@Override
public void postProcessBeanDefinitionRegistry(
BeanDefinitionRegistry registry) throws BeansException {
System.out.println("BeanDefinitionRegistryPostProcessor,Ordered=1 postProcessBeanDefinitionRegistry()");
}
@Override
public int getOrder() {
return 1;
}
}
运行结果:
BeanDefinitionRegistryPostProcessor,PriorityOrdered=0 postProcessBeanDefinitionRegistry()
BeanDefinitionRegistryPostProcessor,PriorityOrdered=1 postProcessBeanDefinitionRegistry()
BeanDefinitionRegistryPostProcessor,Ordered=0 postProcessBeanDefinitionRegistry()
BeanDefinitionRegistryPostProcessor,Ordered=1 postProcessBeanDefinitionRegistry()
BeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry()
BeanDefinitionRegistryPostProcessor,PriorityOrdered=0 postProcessBeanFactory()
BeanDefinitionRegistryPostProcessor,PriorityOrdered=1 postProcessBeanFactory()
BeanDefinitionRegistryPostProcessor,Ordered=0 postProcessBeanFactory()
BeanDefinitionRegistryPostProcessor,Ordered=1 postProcessBeanFactory()
BeanDefinitionRegistryPostProcessor postProcessBeanFactory()
BeanFactoryPostProcessor postProcessBeanFactory()