基于PostProcessorRegistrationDelegate类的示例

9 篇文章 0 订阅

对于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() 被调用 了...```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值