DaoFactory的有关问题!求教
DaoFactory的问题!求教!
package org.yeeku.factory;
import org.yeeku.dao.base.Dao;
import org.yeeku.consttool.*;
import org.dom4j.*;
import org.dom4j.io.*;
import java.util.*;
import java.io.*;
public class DaoFactory
{
private Map<String , Dao> daoMap = new HashMap<String , Dao>();
private static DaoFactory df;
private DaoFactory()throws Exception
{
Document doc = new SAXReader().read(new File(ConstantsUtil.realPath + "\\daoContext.xml"));
Element root = doc.getRootElement();
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 implClazz = Class.forName(impl);
Dao d = (Dao)implClazz.newInstance();
daoMap.put(id , d);
}
}
public static DaoFactory instance()throws Exception
{
if (df == null)
{
df = new DaoFactory();
}
return df;
}
public Dao getDao(String id)
{
return daoMap.get(id);
}
}
这段代码是STRUTS2和HIBERNATE里的,但我实在是看不出来他的作用,请各位高手指教!
最好能把每句代码,为什么说一下!好的话,我在加分!多谢!
------解决方案--------------------
//这个好像是自己手动的去读XML文件
package org.yeeku.factory;
import org.yeeku.dao.base.Dao;
import org.yeeku.consttool.*;
import org.dom4j.*;
import org.dom4j.io.*;
import java.util.*;
import java.io.*;
public class DaoFactory
{
private Map <String , Dao> daoMap = new HashMap <String , Dao>();
private static DaoFactory df;
private DaoFactory()throws Exception
{
Document doc = new SAXReader().read(new File(ConstantsUtil.realPath + "\\daoContext.xml")); //读XML文件
Element root = doc.getRootElement(); //得到xml根结点
List el = root.elements(); //得到根结点下的所有元素集合
for (Iterator it = el.iterator();it.hasNext() ; ) //读取某一子结点下的结点
{
Element em = (Element)it.next();
String id = em.attributeValue("id"); //得到属性结点 名为ID
String impl = em.attributeValue("class"); //得到属性结点 名为class
Class implClazz = Class.forName(impl); //加载驱动属性结点 名为class的值
Dao d = (Dao)implClazz.newInstance(); //创建这个类的实例
daoMap.put(id , d); //放入Map中
}
}
public static DaoFactory instance()throws Exception
{
if (df == null)
{
df = new DaoFactory();
}
return df;
}
public Dao getDao(String id)
{
return daoMap.get(id);
}
}
------解决方案--------------------
package org.yeeku.factory;
import org.yeeku.dao.base.Dao;
import org.yeeku.consttool.*;
import org.dom4j.*;
import org.dom4j.io.*;
import java.util.*;
import java.io.*;
public class DaoFactory
{
private Map<String , Dao> daoMap = new HashMap<String , Dao>();
private static DaoFactory df;
private DaoFactory()throws Exception
{
Document doc = new SAXReader().read(new File(ConstantsUtil.realPath + "\\daoContext.xml"));
Element root = doc.getRootElement();
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 implClazz = Class.forName(impl);
Dao d = (Dao)implClazz.newInstance();
daoMap.put(id , d);
}
}
public static DaoFactory instance()throws Exception
{
if (df == null)
{
df = new DaoFactory();
}
return df;
}
public Dao getDao(String id)
{
return daoMap.get(id);
}
}
这段代码是STRUTS2和HIBERNATE里的,但我实在是看不出来他的作用,请各位高手指教!
最好能把每句代码,为什么说一下!好的话,我在加分!多谢!
------解决方案--------------------
//这个好像是自己手动的去读XML文件
package org.yeeku.factory;
import org.yeeku.dao.base.Dao;
import org.yeeku.consttool.*;
import org.dom4j.*;
import org.dom4j.io.*;
import java.util.*;
import java.io.*;
public class DaoFactory
{
private Map <String , Dao> daoMap = new HashMap <String , Dao>();
private static DaoFactory df;
private DaoFactory()throws Exception
{
Document doc = new SAXReader().read(new File(ConstantsUtil.realPath + "\\daoContext.xml")); //读XML文件
Element root = doc.getRootElement(); //得到xml根结点
List el = root.elements(); //得到根结点下的所有元素集合
for (Iterator it = el.iterator();it.hasNext() ; ) //读取某一子结点下的结点
{
Element em = (Element)it.next();
String id = em.attributeValue("id"); //得到属性结点 名为ID
String impl = em.attributeValue("class"); //得到属性结点 名为class
Class implClazz = Class.forName(impl); //加载驱动属性结点 名为class的值
Dao d = (Dao)implClazz.newInstance(); //创建这个类的实例
daoMap.put(id , d); //放入Map中
}
}
public static DaoFactory instance()throws Exception
{
if (df == null)
{
df = new DaoFactory();
}
return df;
}
public Dao getDao(String id)
{
return daoMap.get(id);
}
}
------解决方案--------------------
- Java code
package org.yeeku.factory; import org.yeeku.dao.base.Dao; import org.yeeku.consttool.*; import org.dom4j.*; import org.dom4j.io.*; import java.util.*; import java.io.*; public class DaoFactory { private Map <String , Dao> daoMap = new HashMap <String , Dao>(); private static DaoFactory df; private DaoFactory()throws Exception {//读取xml文件 Document doc = new SAXReader().read(new File(ConstantsUtil.realPath + "\\daoContext.xml")); Element root = doc.getRootElement(); List el = root.elements(); //循环遍历所有xml元素 for (Iterator it = el.iterator();it.hasNext() ; ) { Element em = (Element)it.next(); //获得id,class属性 String id = em.attributeValue("id"); String impl = em.attributeValue("class"); //通过反射加载class属性指定的类 Class implClazz = Class.forName(impl); //实例话该类,该类一定要实现Dao接口。 Dao d = (Dao)implClazz.newInstance(); //把id作为key,dao作为value放到map里面 daoMap.put(id , d); } } //没有实例话就先实例化,然后就返回factory实例,否则直接返回facotory实例 public static DaoFactory instance()throws Exception { if (df == null) { df = new DaoFactory(); } return df; } //根据id 来取dao,对应的语句->>>daoMap.put(id , d); public Dao getDao(String id) { return daoMap.get(id); } }