8.1.2:容器后处理器

除了上篇文章讨论的Bean后处理器,Spring还提供了一种容器后处理器。Bean后处理器负责处理容器中的所有Bean实例,而容器后处理器则负责处理容器本身。

容器后处理器必须实现 BeanFactoryPostProcessor 接口,该接口中有一个方法:

void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException

实现该方法的方法体就是对Spring容器进行的处理,这种处理可以对Spring容器进行自定义扩展,当然也可以对Spring容器不进行任何处理。

Axe.java :

public interface Axe {
	public String chop();
}
SteelAxe.java :

public class SteelAxe implements Axe {

	@Override
	public String chop() {
		return "钢斧砍柴真快";
	}

	public SteelAxe() {
		System.out.println("Spring实例化依赖Bean:SteelAxe实例...");
	}
	
	
}
Person.java :

public interface Person {
	public void useAxe();
}
Chinese.java :

public class Chinese implements Person{
	
	private Axe axe;
	
	public void setAxe(Axe axe) {
		System.out.println("Spring执行依赖关系注入,setAxe...");
		this.axe = axe;
	}

	public Chinese() {
		System.out.println("Spring实例化主调Bean:Chinese实例...");
	}

	@Override
	public void useAxe() {
		System.out.println(axe.chop());
	}

}
FirstBeanFactoryPostProcessor.java :

public class FirstBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
			throws BeansException {
		System.out.println("程序对Spring所做的BeanFactory的初始化没有改变...");
		System.out.println("Spring容器是:"+beanFactory);
	}

}
bean.xml核心配置:

 <bean id="chinese" class="com.bean.Chinese">
    <property name="axe" ref="steelAxe"/>
 </bean>
  
 <bean id="steelAxe" class="com.bean.SteelAxe"/>
 <bean id="beanFactoryPostProcessor" class="com.bean.FirstBeanFactoryPostProcessor"/>
Test.java :

public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
		Person p=(Person) ctx.getBean("chinese");
		p.useAxe();
	}

}
运行Test.java,控制台输出:

程序会自动搜索容器中实现了BeanFactoryPostProcessor接口的类,并将它注册成容器后处理器。

Spring已经提供了如下几个常用的容器后处理器:

① PropertyPlaceholderConfigurer:属性占位符配置器。

② PropertyOverrideConfigurer:重写占位符配置器。

CustomAutowireConfigurer:自定义自动装配的配置器。

CustomScopeConfigurer:自定义作用域的配置器。

从上面的介绍可以看出,容器后处理器通常用于对Spring容器进行处理,并且总是在容器实例化任何其他的Bean之前,读取配置文件的元数据,并有可能修改这些元数据。

如果有需要,程序可以配置多个容器后处理器,多个容器后处理器可设置order属性来控制容器后处理器的执行次序。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值