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

本文介绍了一种不使用Spring框架时创建和管理DAO实例的方法——DAO工厂模式。通过解析配置文件daoContext.xml,创建并缓存DAO实例,实现按需获取指定的DAO对象。示例中包括了UserDao和MessageDao的实例化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值