`
afeitech
  • 浏览: 34208 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用DAO工厂创建并管理dao实例

阅读更多

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

}

 

分享到:
评论
3 楼 walter_hu 2010-10-22  
为何老是找不到文件?试了好多次 但是如果将文档换为properties就可以了
2 楼 walter_hu 2010-10-16  
受益匪浅,不过就是还是不很习惯,刚刚开始接触DAO
1 楼 yongtree 2008-09-09  
很漂亮啊,对我很有帮助,谢谢了。

相关推荐

Global site tag (gtag.js) - Google Analytics