不用Spring的时候,我们常用DAO工厂来创建并管理dao实例。
daoContext.xml
<?xml version="1.0" encoding="UTF-8"?> <daoContect> <dao id="userDao" class="com.afei.dao.impl.UserDaoHibernate"></dao> <dao id="messageDao" class="com.afei.dao.impl.MessageDaoHibernate"></dao> </daoContect>
DaoFactory.java
public class DaoFactory {
//建立一个DAO实例的缓冲池
private Map<String,Object> daoMap=new HashMap<String,Object>();
//建立DAO工厂实例:他是一个单态模式,所以是静态的实例
private static DaoFactory df;
//初始化DAO工厂
//构造器私有才能阻止系统创建多个DaoFactory实例
private DaoFactory(String path)throws Exception{
//采用dom4j来读取配置文件,获得Document对象
Document doc=new SAXReader().read(new File(path+"\\daoContext.xml"));
Element root=doc.getRootElement();//由Document获得根元素
List el=root.elements();//由根元素获得所有元素
for(Iterator it=el.iterator();it.hasNext();){
Element em=(Element)it.next();
String id=em.attributeValue("id");
String impl=em.attributeValue("class");//得到class表示字符串
Class implClass=Class.forName(impl);// 把该字符串变成一个具体的类
Object obj=implClass.newInstance();//生成该类的对象
daoMap.put(id, obj);//把这个对象放到DAO缓冲池里
}
}
//提供一个普通的入口方法,用以返回一个DaoFactory实例
public static DaoFactory instance(String path)throws Exception{
if(df==null){
df=new DaoFactory(path);
}
return df;
}
//获取具体的DAO实例
public Object getDao(String id){
return daoMap.get(id);
}
}
MessageManagerImpl.java
public class MessageManagerImpl implements MessageManager {
private UserDao userDao;
private MessageDao messageDao;
//构造方法:负责初始化DAO组件
public MessageManagerImpl()throws MessageException{
try {
userDao=(UserDao)DaoFactory.instance(null).getDao("userDao");
messageDao=(MessageDao)DaoFactory.instance(null).getDao("messageDao");
} catch (Exception e) {
e.printStackTrace();
throw new MessageException("初始化业务逻辑组件出现异常......");
}
}
//...................................................
//下面就可以用了
}