不用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("初始化业务逻辑组件出现异常......");
		}
	}
	
                //...................................................
	
                //下面就可以用了

}

 

评论
发表评论

您还没有登录,请登录后发表评论