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的任何文档里都没 有提及。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值