• 如何插手spring启动过程


      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的实现。

      

    public class DatePropertyEditorRegistrar implements PropertyEditorRegistrar {
    
      private PropertyEditor propertyEditor;
      public void registerCustomEditors(PropertyEditorRegistry peRegistry) {
        peRegistry.registerCustomEditor(java.util.Date.class, getPropertyEditor());
      }
      public PropertyEditor getPropertyEditor(){
        return propertyEditor;
      }
     
     public void setPropertyEditor(PropertyEditor propertyEditor){
        this.propertyEditor = propertyEditor;
      }
      

    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>
  • 相关阅读:
    Java第十次作业-房地产;学生成绩计算
    找回感觉之模拟房地产首付计算
    软件工程第四次作业—结对项目
    【作业】需要改进的用户体验二三则
    项目互测测试方式及报告
    [ASE]项目介绍及项目跟进——TANK BATTLE·INFINITE
    Hello World!
    [ASE]sprint3 总结 & sprint4计划
    [ASE][Daily Scrum]12.15
    [ASE][Daily Scrum]12.12
  • 原文地址:https://www.cnblogs.com/beiyeren/p/2944300.html
Copyright © 2020-2023  润新知