转贴处 http://www.blogjava.net/improviser/archive/2007/09/24/147777.html
本文内容演示属性文件用法的简单例子。
首先定义模型接口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 }