`

uses of PropertyOverrideConfigurer

 
阅读更多
uses of PropertyOverrideConfigurer

Spring提供了用属性文件配置Spring的功能,方法是使用PropertyPlaceholderConfigurer加载配置文件:
xml 代码

    <!-- RESOURCE DEFINITIONS --> 
    <bean id="propertyConfigurer" 
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
        <property name="locations"> 
            <list> 
                <value>classpath*:conf/jdbc.properties</value> 
                <value>classpath*:conf/hibernate.properties</value> 
            </list> 
        </property> 
    </bean>  

加载了配置文件以后,书写占位符 ${property.name}来配置bean的属性,例如
xml 代码

    <!-- DataSource Definition, using Apache DBCP connection pool --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
        <property name="driverClassName" value="${jdbc.driverClassName}" /> 
        <property name="url" value="${jdbc.url}" /> 
        <property name="username" value="${jdbc.username}" /> 
        <property name="password" value="${jdbc.password}" /> 
    </bean>  

在 实际开发中,当我们需要不同的配置策略的时候,比如开发和测试很可能用的是不同的数据库,就需要更改配置文件,很麻烦。幸好Spring提供了解觉的办 法:PropertyOverrideConfigurer,顾名思义,它允许配置文件加载后动态的覆盖某些bean的属性,当没有显式配置的时候使用默 认的配置,否则使用覆盖配置。
具体用法:
xml 代码

    <bean id="testPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer"> 
        <property name="location" value="classpath:spring/test/test.properties"/> 
        <property name="ignoreInvalidKeys" value="true"/> 
    </bean>  


test.properties 是一个属性文件,但是具体的写法不一样,PropertyPlaceholderConfigurer中属性文件的key写的是占位符的变量名,而这里是 按照bean.property=value的格式来写的,比如你想覆盖datasource的driverClassName属性值,写成 dataSource.driverClassName=jdbc:mysql:....

注意:对于属性集合的情况,有特殊的写法
xml 代码

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
        <property name="dataSource" ref="dataSource" /> 
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/> 
        <property name="hibernateProperties"> 
            <props> 
                <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
                <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop> 
                <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop> 
            </props> 
        </property>       
    </bean>  


hibernate.dialect 是属性集合hibernateProperties中的一项,如果写成 sessionFactory.hibernateProperties.hibernate.dialect就会报错,这时候要写成 sessionFactory.hibernateProperties[hibernate.dialect],这一点,Spring的任何文档里都没 有提及。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics