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;
}
}
这一篇,就先把工厂给配置好。下一篇,我们把由开始都最后的流程进行实现。
浙公网安备 33010602011771号