DAO工厂类中如何将DAO实现类与DAO接口连接

hjm0803 2011-03-31 04:59:10
大家好,小弟我根据《深入浅出Hibernate》中介绍的DAO 方法配置自己的项目,但是运行时一直显示:java.lang.ClassCastException: java.lang.Class cannot be cast to dao.UserDao
我也知道这是类型不能强制转化的问题,但是我不晓得怎么改,请大家帮帮我吧,真是太感谢了。。
UserDao为DAO接口类
1、DAO代理类
package dao.proxy;
import java.util.List;
import java.util.Map;
import javaBean.UserBean;
import dao.DaoFactory;
import dao.UserDao;
public class UserProxy {
public static List queryArray(Map map){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.queryArray(map);
}
public static boolean insert(UserBean user){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.insert(user);
}
public static List queryArrayShop(Map map){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.queryArrayShop(map);
}
public static List queryArrayAdmin(Map map){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.queryArrayAdmin(map);
}
public static boolean passwordModify(String userName,String password,String radioname){
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
return userdao.passwordModify(userName, password, radioname);
}
}
2、dao工厂类
package dao;
import java.util.*;
public class DaoFactory {
private static HashMap daoMap=null;
public static Object getDao(Class daoInterface){
initial();//初始化
Object dao=daoMap.get(daoInterface);
if(dao==null)
System.out.println("No Implementation found of Dao interface!"+daoInterface.getName());
return dao;
}
/*初始化DaoFctory
* 加载DAO Interface,在daoMap中实例化*/
public static synchronized void initial(){
if(daoMap==null)
daoMap=DAOConfig.load();//根据配置文件中加载Dao实现配置
}
}
3、配置类Config.class
package dao;
import java.util.*;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.igfay.jfig.JFig;
import org.igfay.jfig.JFigIF;
import org.igfay.jfig.JFigLocator;
public class DAOConfig {
private static Logger logger=LogManager.getLogger(DAOConfig.class);
private static final String DAO_CONFIG_FILE="dao/dao.xml";
private static final String DAO_CONFIG_SECTION="DAO";
/*加载DAO 接口*/
public static synchronized HashMap load(){
HashMap map=new HashMap();
JFigLocator jfigLocator=new JFigLocator(DAO_CONFIG_FILE);
JFigIF daoConfig=JFig.getInstance(jfigLocator);
Properties prop=daoConfig.getSectionAsProperties(DAO_CONFIG_SECTION);
Enumeration enumSection=prop.keys();
while(enumSection.hasMoreElements()){
String daoIFace=(String)enumSection.nextElement();
String daoImpl=prop.getProperty(daoIFace);
try{
Class iface=ClassToolKit.loadClass(daoIFace);//调用类ClassToolKit
Class impl=ClassToolKit.loadClass(daoImpl);
//将接口作为HashMap索引,实现类作为值
map.put(iface, impl);
}catch(ClassNotFoundException e){
logger.debug("No Class Found:"+e.getMessage());
}
}
return map;
}
}
4、加载类ClassToolKit.class
package dao;
public class ClassToolKit {
public static Class loadClass(String className)throws ClassNotFoundException{
Class clas=null;
try{
/*先尝试用当前ClassLoader加载*/
clas=Thread.currentThread().getContextClassLoader().loadClass(className);
}catch(Exception e){
e.printStackTrace();
}
if(clas==null)
clas=Class.forName(className);//如果通过当前ClassLoader加载失败,使用系统ClassLoader加载
return clas;
}
}
5.xml内容:dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<section name="DAO">
<entry key="dao.UserDao" value="dao.simple.UserDaoSimple"/>
</section>
</configuration>
...全文
408 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjm0803 2011-03-31
  • 打赏
  • 举报
回复
控制台就显示Unhandled Exception thrown: class java.lang.ClassCastException
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class)这句话的意识是UserDao是DAO接口类,DaoFactory.getDao(UserDao.class)是获取UserDao对应的DAO实现类,此方法返回的是Object类型,我不知道该怎么转化。可书上就是这么转化的,所以我参考来用用,结果不行。大家帮我一下吧。
hjm0803 2011-03-31
  • 打赏
  • 举报
回复
UserDao userdao=(UserDao)DaoFactory.getDao(UserDao.class);
我想是这行代码,但我不知道怎么改才能强制转化顺利
okboy19 2011-03-31
  • 打赏
  • 举报
回复
这么多地方用了强制转换啊~
你在有可能出错的地方都用System.out.pring();来测试哪里会出错啊
智鹿软件 2011-03-31
  • 打赏
  • 举报
回复
这么多代码看的头大,看看是哪一行报错,然后处理。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧