细说Spring——IoC详解(深入IoC实现)

容器启动阶段我们可以其实可以偷偷做一些事情

书接上文:细说Spring——IoC详解(一),我们已经知道了容器实现控制反转和依赖注入的过程可以分为两个阶段:

  • 容器启动阶段
  • Bean的实例化阶段

其实在这个两个阶段我们都可以偷偷的做一些事情,我们可以根据具体的场景加入自定义的扩展逻辑,下面我们就来了解一下容器启阶段我们可以做哪些事情。

Spring提供了一种叫做BeanFactoryPostProcessor的容器扩展机制。该机制允许我们在容器实例化相应对象之前,对注册到容器的BeanDefinition所保存的信息做相应的修改。我们已经知道BeanDefinition中保存了创建一个对象所需要的所有信息,那么既然我们可以修改BeanDefinition所保存的信息,那么是不是我们就可以为所欲为了,哈哈,比如我们可以修改其中bean定义的某些属性,为bean定义增加其他信息等,想想就很激动呢。那我们就接着看看怎么使用BeanFactoryPostProcessor容器扩展机制吧。

这里要把BeanFactoryApplicationContext两种容器分开来讲:

  • 首先是BeanFactory,我们也知道BeanFactoryApplicationContext的父类,那么功能上BeanFactory也是比较弱小的,我们需要使用手动写代码来应用BeanFactoryPostProcessor,例如:
// 声明将被后处理的BeanFactory实例
ConfigurableListableBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("配置文件地址"));
// 声明要使用的BeanFactoryPostProcessor
PropertyPlaceholderConfigurer propertyPostProcessor = new PropertyPlaceholderConfigurer();
propertyPostProcessor.setLocation(new ClassPathResource("jdbc.properties"));
// 执行后处理操作
propertyPostProcessor.postProcessBeanFactory(beanFactory); 
  • 接着是更高级的ApplicationContext容器,这个就牛逼多了,他可以自动识别容器中的BeanFactoryPostProcessor实例对象,并使用他们,是的,是“他们”,我们可以在一个容器中使用多个BeanFactoryPostProcessor,这个时候聪明的你就可能想到顺序的问题,我们先买个关子,这里还是说怎么在ApplicationContext容器中使用BeanFactoryPostProcessor,我们其实只要把BeanFactoryPostProcessor的实现类配置到配置文件中就可以了(额,突然想到好像也应该把xml配置文件讲一下,这个还是先挖个坑把)如下所示:
<beans>
 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
         <list>
             <value>conf/jdbc.properties</value>
             <value>conf/mail.properties</value>
         </list> 
     </property>
 </bean>
</beans> 

是不是简单多了,果然还是高级的好啊。接下来就让我们看看BeanFactoryPostProcessor到底哪里神通广大吧。在我们学习要自定义实现BeanFactoryPostProcessor之前,我们可以先来看看为Spring已经提供的几个现成的BeanFactoryPostProcessor实现类:

1、PropertyPlaceholderConfigurer

在我们没有学习过PropertyPlaceholderConfigurer之前,我们在写xml配置文件的时候可能需要将一些可能改变的数据写的xml

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值