随笔-0  评论-5  文章-26  trackbacks-0

不用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("初始化业务逻辑组件出现异常");   
        }
   
    }
   
       
                
//   
       
                
//下面就可以用了   
  
}
 
posted on 2009-05-13 13:15 L.J. 阅读(534) 评论(0)  编辑  收藏 所属分类: J2EE

只有注册用户登录后才能发表评论。


网站导航: