使用一个Dao生产类(工厂模式)产生自己所需的Dao;

Factory设计为单例模式:

class DaoFactory{

  //自己实例化一个对象,以便其他类调用获得Dao

  private static DaoFactory daoFactory;

  //将你需要的Dao类的信息放入properties中,为了以后的方便维护

  private Properties daoConfig ;

  //私有构造,不允许其他类实例化

  private DaoFactory(){

  //放到初始化中的语句只会被执行一次

  InputStream is = DaoFactory.Class.getLoader().getResourceAsStream();

    try{

      daoConfig.load(is);

    }catch(Exception e){

      throw new RunTimeException(e);

    }

  }

  //构造方法,使私有实例可以被其他类调用

  public static DaoFactory getInstance(){

  retuen daoFactory;

  }

  //为了返回自己所需要的Dao,使用泛型接受所需的Dao

  public static <T>T createDao(Class<T> clazz){

  String name = clazz.getSimpleName();

  String className = daoConfig.getproperties(name);  //name = 你自己在properties中配置的键对值

    try{

      //获得实例

      T dao = (T) Class.forName(className).newInstance();

      return dao;

    }catch(Exception e){

      throws new RuntimeException(e);

    }

  }

}

转载于:https://www.cnblogs.com/sandaoliu/p/3719097.html

如何不用更改底层来实现Dao多样化相关推荐

  1. 不用更改注册表就可以更改桌面所在的位置

    Windows桌面上放的档案太多,最近发现C槽可用空间太少,计算机跑的越来越慢,有什么方法可以把Windows的整个桌面的文件夹移到系统的其他硬盘位置吗?我有方法如下: 方法/步骤 1.不用更改注册表 ...

  2. 解决execjs经典的 gbk报错问题,不用修改底层源码。

    import subprocess from functools import partialsubprocess.Popen = partial(subprocess.Popen, encoding ...

  3. simulink和c语言开发,Simulink之嵌入式C代码生成-应用层和底层的接口

    今天给大家带来的仍然是基于MBD的嵌入式代码生成,主要把应用层和底层接口之间的代码生成配置说一下.本周末会更新功能安全相关,欢迎大家留言交流! 作为一个总是用C写代码的人来说,第一次接触到基于MBD的 ...

  4. java基础知识【第22期】-- DAO模式和分层

    导读: 本篇是JAVA基础系列的第22篇,今天我们梳理DAO模式开发及分层的相关知识. 1.分层开发 分层开发是一种化大为小,分而治之的软件开发方法. 分层开发的好处: 各层专注于自己功能的实现,便于 ...

  5. 动态代理——拦截器——责任链——AOP面向切面编程底层原理详解(迪丽热巴版)

    目录 动态代理模式详解 前言 什么是代理模式 如何进行代理 静态代理 动态代理 JDK动态代理 CGLIB动态代理 拦截器 责任链模式 博客文章版权申明 动态代理模式详解 前言 代理模式是设计模式中非 ...

  6. mysql反模式_myfat: MyFat是MyBatis的DAO功能增强插件

    MyFat让MyBatis更胖 简介 | Intro MyFat是MyBatis的DAO功能增强插件,利用全功能持久层工具jSqlBox来补足MyBatis缺少的功能.MyFat需Java8或以上. ...

  7. Git总是有没法重置的二进制相同的修改?不用怕!

    2019独角兽企业重金招聘Python工程师标准>>> 公元二〇一六年九月二十八日,新中国建国六十七年国庆前三天,有 重大发现! 基本可以确定问题所在: 原因就是 VS2015 创建 ...

  8. linux更改默认版本,linux - 将某个软件版本设为ubuntu中的默认版本 - Ubuntu问答

    问题描述 我目前在Ubuntu 12.04上安装了2个版本的php. 一个用于使用apt-get安装的php 5.3,另一个用于xampp与php 5.5一起安装 当我执行这些命令时: > wh ...

  9. 【图像处理opencv】_Jupyter 更改文件默认保存目录

    问题描述:对于刚开始接触Jupyter的人来说,安装好Jupyter后是类似下面这个样子,已进入界面就是这一大堆文件,感觉很乱.开始我尝试去删除这些文件夹,删除失败,原因是必须要清空文件夹里的目录内容 ...

最新文章

  1. testng.xml 配置大全
  2. 学了python可以从事什么岗位-学完Python编程可以从事哪些岗位?
  3. 设置代理_ie浏览器一键取消自动检测设置并设置代理
  4. linux git 推送空文件夹
  5. 【译】An Intro to TrueBit: A Scalable, Decentralized Computational Court.
  6. MATLAB 人脸定位
  7. Hive权限与HDFS权限分离导致的一些问题
  8. (23)FPGA面试题常用逻辑电平
  9. 软件测试基础课程学习笔记5---软件缺陷概述
  10. 安卓固件修改工具_【固件升级】给力!安卓6.0以上设备均已升级BOOX OS 2.3系统...
  11. 在svn中发布多个工程
  12. python数据分析numpy_Python数据分析之numpy学习(一)
  13. 【故障分析】基于matlab轴承故障仿真信号时域波形图+幅度谱图【含Matlab源码 123期】
  14. MISRA C 2004
  15. 大地高、正高、正常高以及GPS测高等若干问题
  16. Web 中servlet连接出现404路径错误 //Servlet出现404的解决方法
  17. android 键盘语音输入,讯飞输入法Android V7.0.4265 长按空格键开启语音输入
  18. 浙江卫视的万峰纯粹一烂人
  19. Animation动画学习
  20. 网页的兼容性解决办法

热门文章

  1. python进阶21之actor
  2. KANO模型,一个能解决你工作中90%烦恼的需求分析神器
  3. 深度剖析 | 基于大数据架构的BI应用
  4. strlen函数在哪个头文件_第二十七中、字符串处理函数-strlen、strcat、strncat
  5. vue路由配置src/router/index.js
  6. python cryptography key加密_python3利用cryptography 进行加密和解密
  7. eclipse 64位_Eclipse安装教程
  8. 计算机算法设计与分析 最大子数组问题
  9. 【caffe】Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERRO
  10. 2018 蓝桥杯省赛 B 组模拟赛(一)I. 天上的星星(二维前缀和)