package cn.itcast.usermng.dao;
import java.io.InputStream;
import java.util.Properties;
/**
* 通过配置文件得到dao实现类的名称!
* 通过类名称,完成创建类对象!(反射完成的!)
* @author cxf
*
*/
public class DaoFactory {
private static Properties props = null;
static {
// 加载配置文件内容到props对象中
try {
InputStream in = DaoFactory.class
.getClassLoader().getResourceAsStream("dao.properties");
props = new Properties();
props.load(in);
} catch(Exception e) {
throw new RuntimeException(e);
}
}
/**
* 返回一个具体UserDao的实现类对象
* @return
*/
public static UserDao getUserDao() {
/**
* 给出一个配置文件,文件中给出UserDao接口的实现类名称!
* 我们这个方法,获取实现类的类名,通过反射完成创建对象!
*/
/*
* 得到dao实现类的名称
*/
String daoClassName = props.getProperty("cn.itcast.usermng.dao.UserDao");
/*
* 通过反射来创建实现类的对象
*/
try {
Class clazz = Class.forName(daoClassName);
return (UserDao)clazz.newInstance();
} catch(Exception e) {
throw new RuntimeException(e);
}
}
}
总结一句话:
通过类加载器,读取配置文件,获得实现类的地址
继续通过类加载器,加载从配置文件中读取到的类地址,创建该类对象,并返回