Spring筆記之三(Usage of property config)
首先定義模型接口Model,視圖接口View,以及它們實現類ImpModel,ImpView.
Model中定義方法getString();View中定義Model實例為其屬性,在實現類ImpView中實現方法
disPlay(),其方法體為Model實例的getString()方法,并將其打印出來。
定義屬性文件
msf.properties
disPalyer.class = ImpView
provider.class = ImpModel
msf.properties
disPalyer.class = ImpView
provider.class = ImpModel
編寫工廠類
TestFactory.java
import ?java.util.Properties;
public ? class ?TestFactory{
???? private ? static ?TestFactory?instance? = ? null ;
???? private ?Properties?props? = ? null ;
???? private ?View?disPalyer? = ? null ;
???? private ?Model?provider? = ? null ;
???? static ?{
????????instance? = ? new ?TestFactory();
????}
???? public ? static ?TestFactory?getInstance()?{
???????? return ?instance;
????}
???? public ?View?getView()?{
???????? return ?disPalyer;
????}
???? public ?Model?getModel()?{
???????? return ?provider;
????}
???? private ?TestFactory()?{
????????props? = ? new ?Properties();
???????? try ?{
???????????? // 加載屬性文件
????????????props.load(?TestFactory. class .getResource( " msf.properties " ).openStream());?
???????????? // 獲取屬性值
????????????String?rendererClass? = ?props.getProperty( " renderer.class " );
????????????String?providerClass? = ?props.getProperty( " provider.class " );
???????????? // 產生類實例對象
????????????renderer? = ?(View)?Class.forName(rendererClass).newInstance();
????????????provider? = ?(Model)?Class.forName(providerClass).newInstance();
????????}? catch ?(Exception?ex)?{
????????????ex.printStackTrace();
????????}
????}
}
import ?java.util.Properties;
public ? class ?TestFactory{
???? private ? static ?TestFactory?instance? = ? null ;
???? private ?Properties?props? = ? null ;
???? private ?View?disPalyer? = ? null ;
???? private ?Model?provider? = ? null ;
???? static ?{
????????instance? = ? new ?TestFactory();
????}
???? public ? static ?TestFactory?getInstance()?{
???????? return ?instance;
????}
???? public ?View?getView()?{
???????? return ?disPalyer;
????}
???? public ?Model?getModel()?{
???????? return ?provider;
????}
???? private ?TestFactory()?{
????????props? = ? new ?Properties();
???????? try ?{
???????????? // 加載屬性文件
????????????props.load(?TestFactory. class .getResource( " msf.properties " ).openStream());?
???????????? // 獲取屬性值
????????????String?rendererClass? = ?props.getProperty( " renderer.class " );
????????????String?providerClass? = ?props.getProperty( " provider.class " );
???????????? // 產生類實例對象
????????????renderer? = ?(View)?Class.forName(rendererClass).newInstance();
????????????provider? = ?(Model)?Class.forName(providerClass).newInstance();
????????}? catch ?(Exception?ex)?{
????????????ex.printStackTrace();
????????}
????}
}
最后編寫測試方法
1??public?static?void?main(String[]?args)?{
2?????????????View?mr?=?TestFactory.getInstance().getView();
3?????????????Model?mp?=?TestFactory.getInstance().getModel();
4?????????????mr.setModel(mp);
5?????????????mr.disPlay();
6?????????}
2?????????????View?mr?=?TestFactory.getInstance().getView();
3?????????????Model?mp?=?TestFactory.getInstance().getModel();
4?????????????mr.setModel(mp);
5?????????????mr.disPlay();
6?????????}
綜上,對屬性文件的加載主要語句
props.load( TestFactory.class.getResource("msf.properties").openStream());
并分別通過newInstance()產生實例對象,本例中使用了設計模式中的工廠模式以及單例實例模式,
因此具有對設計模式進一步了解的意義。
注:另一用法
?1?public?static?void?main(String[]?args)?throws?Exception?{
?2?
?3?????????//?get?the?bean?factory
?4?????????BeanFactory?factory?=?getBeanFactory();
?5?
?6?????????View?mr?=?(View)?factory.getBean("view");
?7?????????mr.render();
?8?????}
?9?
10?????private?static?BeanFactory?getBeanFactory()?throws?Exception?{
11?????????//?get?the?bean?factory
12?????????DefaultListableBeanFactory?factory?=?new?DefaultListableBeanFactory();
13?
14?????????//?create?a?definition?reader
15?????????PropertiesBeanDefinitionReader?rdr?=?new?PropertiesBeanDefinitionReader(
16?????????????????factory);
17?
18?????????//?load?the?configuration?options
19?????????Properties?props?=?new?Properties();
20?????????props.load(TestFactory.class.getResource("msf.properties").openStream());
21?
22?????????rdr.registerBeanDefinitions(props);
23?
24?????????return?factory;
25?????}
?2?
?3?????????//?get?the?bean?factory
?4?????????BeanFactory?factory?=?getBeanFactory();
?5?
?6?????????View?mr?=?(View)?factory.getBean("view");
?7?????????mr.render();
?8?????}
?9?
10?????private?static?BeanFactory?getBeanFactory()?throws?Exception?{
11?????????//?get?the?bean?factory
12?????????DefaultListableBeanFactory?factory?=?new?DefaultListableBeanFactory();
13?
14?????????//?create?a?definition?reader
15?????????PropertiesBeanDefinitionReader?rdr?=?new?PropertiesBeanDefinitionReader(
16?????????????????factory);
17?
18?????????//?load?the?configuration?options
19?????????Properties?props?=?new?Properties();
20?????????props.load(TestFactory.class.getResource("msf.properties").openStream());
21?
22?????????rdr.registerBeanDefinitions(props);
23?
24?????????return?factory;
25?????}
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
???? 隱姓埋名/低調華麗/簡單生活/完美人生
posted on 2007-09-24 13:51 poetguo 閱讀(1548) 評論(3) 編輯 收藏 所屬分類: Spring