⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 daofactory.java

📁 oa办公系统
💻 JAVA
字号:
/**
 * FileName:DaoFactory.java,v 1.0 created in 2008-11-5 下午02:44:00
 * Created by sean
 * Copyright (c) 2008 wanczy
 * All Rights Reserved.
 */
package cn.jx.ecjtu.oa.ps.dao;

import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;

import com.wanczy.dbutil.DBAccess;
/**
 * Dao的工厂,读取当前目录下的dao.properties文件,根据文件中接口类名与实现类全限定名的对应关系生成实例。
 * @author sean
 * @version $Revision: 1.1 $
 * @since 1.0
 */
public class DaoFactory {
	private static ResourceBundle BUNDLE = ResourceBundle
			.getBundle("cn.jx.ecjtu.oa.ps.dao.dao");

	private static Map<Class, BaseDao> daos = new HashMap<Class, BaseDao>();
	private static final DBAccess dbAccess=new DBAccess();
	public static BaseDao getDao(Class interfaceClass) {
		BaseDao dao = daos.get(interfaceClass);
		if (dao == null) {
			String interfaceName = interfaceClass.getName();// 取得接口类的全限定名
			String implClassName = BUNDLE.getString(interfaceName);// 通过接口类的全限定名,到dao.properties文件中,查找到实现类的全限定名
			// System.out.println(implClassName);
			try {
				Class clazz = Class.forName(implClassName);// 建立全限定名指定的类的描述类实例
				dao = (BaseDao) clazz.newInstance();// 通过描述实例建立指定的类的一个实例
				dao.setDbAccess(dbAccess);//注入DBAccess,等于给DAO初始化了数据库SQL执行器
				daos.put(interfaceClass, dao);//将实例化的DAO类缓存起来,以便下一次调用的时候直接取出来使用
			} catch (ClassNotFoundException e) {
				throw new RuntimeException("接口实现类" + implClassName + "找不到", e);
			} catch (InstantiationException e) {
				throw new RuntimeException("接口实现类" + implClassName + "初始化错误", e);
			} catch (IllegalAccessException e) {
				throw new RuntimeException("接口实现类" + implClassName
						+ "构造时,错误的调用方式", e);
			}
		}
		return dao;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -