bean工厂后处理实现心得

当我想把配置文件include的功能加进步的时候,我打开了spring的参考手册,想大概看看spring是怎么做的。
但是我看到了spring中PropertyPlaceholderConfigurer的做法,对比了一下我的做法,发现我的很土啊,于是打算重写这个功能。
spring是用BeanFacoryPostProcessor来做的,就是在所有bean生成之前,要调一个回调方法。
问题是,这里实现了BeanFacoryPostProcessor接口的bean需要配置在配置文件中,像其他bean一样被创建,这样就遇到一个像
鸡先还是蛋先的问题。既然在所有bean生成之前,就要有这个BeanFacoryPostProcessor,但是BeanFacoryPostProcessor又是
一个bean。。。。。。。。。。
所以,我打算把BeanFacoryPostProcessor特殊化,也就是要从众多bean中找出BeanFacoryPostProcessor的定义。

本来我看了看spring的代码,以为要把BeanFacoryPostProcessor实例化才可以知道它是不是实现了这个接口,但是后来我发现
并不是这样的,只要有BeanFacoryPostProcessor的class就可以了。但是我的设计是读配置的时候只把String类型的className
保存,而没有保存class,看了看spring也是保存class的,看来我的设计有错误了,于是马上进行修改。

嗯,终于改好了。就是这个函数,在refresh()中加入
private void handleModuleFactoryPostProcessor() throws ModulesException, FactortInitialException, ConstructorException {
List<String> names=getPostProcessorNames(ModuleFactoryPostProcessor.class);
for(String name:names){
ModuleFactoryPostProcessor mfpp=(ModuleFactoryPostProcessor) getModule(name);
singletons.put(name, mfpp);
mfpp.postProcessModuleFactory(this);
for(ConfigurableApplicationContext context:kids){
mfpp.postProcessModuleFactory(context);
}

}
}
我原来实现PropertyPlaceholderConfigurer这个功能,写得很烂,哈哈,现在爽多了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值