码迷,mamicode.com
首页 > 编程语言 > 详细

如何插手spring启动过程

时间:2015-03-13 16:53:22      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

Spring提供了一种叫做BeanFactoryPostProcessor的容器扩展机制。该机制允许我们在容器实例化相应对象之前,对注册到容器的BeanDefinition所保存的信息做相应的修改。这就相当于在容器实现的第一阶段最后加入一道工序,让我们对最终的BeanDefinition做一些额外的操作,比如修改其中bean定义的某些属性,为bean定义增加其他信息等。如果要自定义实现BeanFactoryPostProcessor,通常我们需要实现org.springframework.beans.factory.config.BeanFactoryPostProcessor接口。

  常用的BeanFactoryPostProcessor的实现类

1.PropertyPlaceholderConfigurer

  PropertyPlaceholderConfigurer允许我们在XML配置文件中使用占位符(PlaceHolder),并将这些占位符所代表的资源单独配置到简单的properties文件中来加载。以数据源的配置为例,使用了PropertyPlaceholderConfigurer之后(这里沿用代码清单4-42的配置内容),可以在XML配置文件中按照代码清单4-43所示的方式配置数据源,而不用将连接地址、用户名和密码等都配置到XML中。

实例:

 

技术分享

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  <property name="url">    <value>${jdbc.url}</value>  </property>  <property name="driverClassName">    <value>${jdbc.driver}</value>  </property>  <property name="username">    <value>${jdbc.username}</value>  </property>  <property name="password">    <value>${jdbc.password}</value>  </property>  <property name="testOnBorrow">    <value>true</value>  </property>  <property name="testOnReturn">    <value>true</value>  </property>  <property name="testWhileIdle">    <value>true</value>  </property></bean>

技术分享

2.PropertyOverrideConfigurer

  可以通过PropertyOverrideConfigurer对容器中配置的任何你想处理的bean定义的property信息进行覆盖替换。这听起来比较抽象,我们还是给个例子吧!比如之前的dataSource定义中,maxActive的值为100,如果我们觉得100不合适,那么可以通过PropertyOverrideConfigurer在其相应的properties文件中做如下所示配置,把100这个值给覆盖掉,如将其配置为200:

spring 配置文件

<bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">  <property name="location" value="pool-adjustment.properties"/></bean>
pool-adjustment.properties文件信息
# pool-adjustment.properties 11 dataSource.minEvictableIdleTimeMillis=1000 dataSource.maxActive=50

(注释:properties文件内容格式必须是  beanName.propertyName=value  )

3、CustomEditorConfigurer

  XML所记载的,都是String类型,即容器从XML格式的文件中读取的都是字符串形式,最终应用程序却是由各种类型的对象所构成。要想完成这种由字符串到具体对象的转换(不管这个转换工作最终由谁来做),都需要这种转换规则相关的信息,而CustomEditorConfigurer就是帮助我们传达类似信息的。

      3.1就是给出一个org.springframe.PropertyEditorRegistrar的实现。

  

技术分享

  DatePropertyEditorRegistrar

技术分享

spring 配置

技术分享

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="propertyEditorRegistrars">
            <list>
                <ref bean="datePropertyEditorRegistrar"/>
            </list>
        </property>
    </bean>
    
    <bean id="datePropertyEditorRegistrar" class="....DatePropertyEditorRegistrar">
        <property name="propertyEditor">
            <ref bean="datePropertyEditor" />
        </property>
    </bean>
    
    <bean id="datePropertyEditor" class="....DatePropertyEditor">
        <property name="datePattern">
            <value>yyyy/MM/dd</value>
        </property>
    </bean>

技术分享

如何插手spring启动过程

标签:

原文地址:http://my.oschina.net/luoh/blog/386537

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!