J2EE DAO模式解析(二)

         上一篇,已经对数据库的基本信息进行了读取,连接代码也已经实现。整个流程为

      jsp界面--->servlet--->工厂--->manager接口---->manager实现----->工厂------>dao接口------>dao实现的形式。

      在这里,很明显工厂是实现各层之间的桥梁。而工厂是通过读取beans-config.xml文件实现的。我们先看一下beans-config.xml文件的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<service-class>
		<service id="com.bjpowernode.drp.flowcard.manager.FlowCardManager" class="com.bjpowernode.drp.flowcard.manager.impl.FlowCardManagerImpl"/> //其中id为接口类所在位置,class为具体实现该接口的类所在位置,此处为业务逻辑层的配置
	</service-class>
	<dao-class>
		<dao id="com.bjpowernode.drp.flowcard.dao.FlowCardDao" class="com.bjpowernode.drp.flowcard.dao.impl.FlowCardDaoImpl"/>  //此处为dao层的配置
	</dao-class>
	
</beans>

        工厂的实现代码为

    

**
 * 抽象工厂,主要创建两个系列的产品
 * 1. Manager系列
 * 2. Dao系列
 *
 */
public class BeanFactory {
	private static BeanFactory instance=new BeanFactory();
	private final String beansConfigFile="beans-config.xml";
	private Document doc;
	//保存Service相关对象
	private Map serviceMap=new HashMap();
	//保存Dao相关对象
	private Map daoMap=new HashMap();
	private BeanFactory()
	{
		try
		{
			doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
		}catch(DocumentException e)
		{
			e.printStackTrace();
			throw new RuntimeException();
		}
	}
	
	public static BeanFactory getInstance()
	{
		return instance;
	}
	/**
	 * 根据产品编号取得Service系列产品
	 * @param serviceId
	 * @return
	 */
	public synchronized Object getServiceObject(Class c)
	{
		//如果存在相关对象实例,返回
		if(serviceMap.containsKey(c.getName()))
		{
			return serviceMap.get(c.getName());
		}
		Element beanElt=(Element)doc.selectSingleNode("//service[@id=\""+c.getName()+"\"]");
		String className=beanElt.attributeValue("class");
		Object service=null;
		try
		{
			service=Class.forName(className).newInstance();
			//将创建好多的对象放到Map中
			serviceMap.put(c.getName(), service);
		}catch(Exception e)
		{
			throw new RuntimeException();
		}
		return service;
	}
	
	public synchronized Object getDaoObject(Class c)
	{
		//如果存在相关对象实例,返回
		if(daoMap.containsKey(c.getName()))
		{
			return daoMap.get(c.getName());
		}
		Element beanElt=(Element)doc.selectSingleNode("//dao[@id=\""+c.getName()+"\"]");
		String className=beanElt.attributeValue("class");
		Object dao=null;
		try
		{
			dao=Class.forName(className).newInstance();
			//将创建好多的对象放到Map中
			daoMap.put(c.getName(), dao);
		}catch(Exception e)
		{
			throw new RuntimeException();
		}
		return dao;
		
	}
}


          这一篇,就先把工厂给配置好。下一篇,我们把由开始都最后的流程进行实现。

      

posted @ 2012-03-15 16:52  转航  阅读(259)  评论(0编辑  收藏  举报