分散配置:
有時(shí)你會(huì)發(fā)現(xiàn)將配置文件分成幾個(gè)分散的配置文件是很有益的。
將Data Source配置到Bean裝配文件中不是很適合。數(shù)據(jù)庫(kù)細(xì)節(jié)是一個(gè)發(fā)布信息。而Bean裝配文件的目的是定義如何裝配系統(tǒng)的各個(gè)模塊。如果使用ApplicationContext當(dāng)作Spring容器,那么,在Spring中分離屬性配置是很簡(jiǎn)單的。使用Spring的PropertyPlaceholderConfigurer告訴Spring從外部屬性文件裝載一些配置信息。
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url">
<value>jdbc:hsqldb:Training</value>
</property>
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="username">
<value>appUser</value>
</property>
<property name="password">
<value>password</value>
</property>
</bean>
location屬性告訴Spring從哪里找到屬性文件。location屬性允許你使用單個(gè)配置文件。如果你想將配置信息分散到多個(gè)配置文件中,請(qǐng)使
用PropertyPlaceholderConfigurer的locations屬性設(shè)置文件列表,使用這種方式,可以使用占位符變量代替Bean裝
配文件中的硬編碼配置了。
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location">
<value>jdbc.properties</value>
</property>
<property name="locations">
<list>
<value>jdbc.properties</value>
<value>security.properties</value>
<value>application.properties</value>
</list>
</property>
</bean>
<bean id="dataSources" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url">
<value>${database.url}</value>
</property>
<property name="driverClassName">
<value>${database.driver}</value>
</property>
<property name="username">
<value>${database.user}</value>
</property>
<property name="password">
<value>${database.password}</value>
</property>
</bean>
定制屬性編輯器:
java.beans.PropertyEditor接口提供了將字符串值映射成非String類型的方法。有一個(gè)好用的這個(gè)接口的實(shí)現(xiàn)-
java.beans.PropertyEditorSupport,它有2個(gè)方法我們會(huì)感興趣:
1、getAsText():方法返回一個(gè)表示屬性值的字符串。
2、setAsText(String value):將傳遞進(jìn)來(lái)的字符串賦給Bean的屬性。
Spring帶了幾種建立在propertyEditorSupport之上的定制編輯器,包括
org.springframework.beans.propertyeditors.URLEditor,它是一個(gè)用于將字符串與java.net.URL相互轉(zhuǎn)換的定制編輯器。
Spring提供的其他定制編輯器包括:
1、ClassEditor-使用包含全稱類名的字符串設(shè)置java.lang.Class屬性。
2、CustormDateEditor-使用某種java.text.DateFormat對(duì)象將一個(gè)字符串設(shè)置給java.util.Date屬性。
3、FileEditor-使用包含文件路徑的字符串設(shè)置java.io.File屬性。
4、LocalEditor-使用包含地域信息的字符串設(shè)置java.util.Local屬性。
5、StringArrayPropertyEditor-將一個(gè)包含逗號(hào)的String轉(zhuǎn)換成String數(shù)組屬性。
6、StringTrimmerEditor-自動(dòng)修正字符串屬性,可以選擇將空字符串轉(zhuǎn)變?yōu)閚ull.
<bean id="costomEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="com.wyq.spring.PhoneNumber">
<bean id="phoneEditor" class="com.wyq.spring.PhoneEditor"></bean>
</entry>
</map>
</property>
</bean>
其中的map中的key表示要添加自定義屬性的類,value表示自定義屬性實(shí)現(xiàn)的類。
package com.wyq.spring;
import java.beans.PropertyEditorSupport;
public class PhoneEditor extends PropertyEditorSupport {
public void setAsText(String textValue) throws IllegalArgumentException {
String stripped = stripNonNumberic(textValue);
String areaCode = stripped.substring(0,3);
String prefix = stripped.substring(3,6);
String number = stripped.substring(6);
PhoneNumber phone = new PhoneNumber(areaCode,prefix,number);
setValue(phone);
}
private String stripNonNumberic(String original){
StringBuffer allNumberic = new StringBuffer();
for(int i=0;i<original.length();i++){
char c = original.charAt(i);
if(Character.isDigit(c)){
allNumberic.append(c);
}
}
return allNumberic.toString();
}
}
posted on 2009-10-31 17:54
王永慶 閱讀(318)
評(píng)論(0) 編輯 收藏 所屬分類:
SPRING