上一篇,已经对数据库的基本信息进行了读取,连接代码也已经实现。整个流程为

jsp界面--->servlet--->工厂--->manager接口---->manager实现----->工厂------>dao接口------>dao实现的形式。

在这里,很明显工厂是实现各层之间的桥梁。而工厂是通过读取beans-config.xml文件实现的。我们先看一下beans-config.xml文件的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<beans><service-class><service id="com.bjpowernode.drp.flowcard.manager.FlowCardManager" class="com.bjpowernode.drp.flowcard.manager.impl.FlowCardManagerImpl"/> //其中id为接口类所在位置,class为具体实现该接口的类所在位置,此处为业务逻辑层的配置</service-class><dao-class><dao id="com.bjpowernode.drp.flowcard.dao.FlowCardDao" class="com.bjpowernode.drp.flowcard.dao.impl.FlowCardDaoImpl"/>  //此处为dao层的配置</dao-class></beans>

工厂的实现代码为

*** 抽象工厂,主要创建两个系列的产品* 1. Manager系列* 2. Dao系列**/
public class BeanFactory {private static BeanFactory instance=new BeanFactory();private final String beansConfigFile="beans-config.xml";private Document doc;//保存Service相关对象private Map serviceMap=new HashMap();//保存Dao相关对象private Map daoMap=new HashMap();private BeanFactory(){try{doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));}catch(DocumentException e){e.printStackTrace();throw new RuntimeException();}}public static BeanFactory getInstance(){return instance;}/*** 根据产品编号取得Service系列产品* @param serviceId* @return*/public synchronized Object getServiceObject(Class c){//如果存在相关对象实例,返回if(serviceMap.containsKey(c.getName())){return serviceMap.get(c.getName());}Element beanElt=(Element)doc.selectSingleNode("//service[@id=\""+c.getName()+"\"]");String className=beanElt.attributeValue("class");Object service=null;try{service=Class.forName(className).newInstance();//将创建好多的对象放到Map中serviceMap.put(c.getName(), service);}catch(Exception e){throw new RuntimeException();}return service;}public synchronized Object getDaoObject(Class c){//如果存在相关对象实例,返回if(daoMap.containsKey(c.getName())){return daoMap.get(c.getName());}Element beanElt=(Element)doc.selectSingleNode("//dao[@id=\""+c.getName()+"\"]");String className=beanElt.attributeValue("class");Object dao=null;try{dao=Class.forName(className).newInstance();//将创建好多的对象放到Map中daoMap.put(c.getName(), dao);}catch(Exception e){throw new RuntimeException();}return dao;}
}

这一篇,就先把工厂给配置好。下一篇,我们把由开始都最后的流程进行实现。

转载于:https://www.cnblogs.com/yanmei-yaomy/archive/2012/03/15/3024694.html

J2EE DAO模式解析(二)相关推荐

  1. Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二]

    . 一 .前言 二 .启动解析 2.1. StreamExecutionEnvironment#execute 2.2. StreamExecutionEnvironment#executeAsync ...

  2. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yarn 提交过程解析

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二] 请大家看原文去. 接上文Flink 1.12.2 源码分析 : yarn-per-job模式浅析 [一 ...

  3. JDBC之二:DAO模式

    JDBC之二:DAO模式 @(JAVA)[java] 详细代码请参见 https://github.com/lujinhong/dao 一.前期准备 1.创建数据库 create database f ...

  4. 持久层是什么意思_软件项目实训及课程设计指导—如何在数据持久层中应用DAO模式...

    软件项目实训及课程设计指导--如何在J2EE应用系统数据持久层中应用DAO模式 1.为什么要在软件应用系统中提供数据持久层 软件应用系统中的数据持久层主要为整个软件应用系统提供数据访问功能服务,从而可 ...

  5. 《Head First设计模式》 读书笔记16 其余的模式(二) 蝇量 解释器 中介者

    <Head First设计模式> 读书笔记16 其余的模式(二) 蝇量 解释器 中介者 蝇量(Flyweight Pattern) 如想让某个类的一个实例能用来提供许多"虚拟实例 ...

  6. opencv图像处理中的一些滤波器+利用滤波器提取条形码(解析二维码)+公交卡倾斜矫正+物体尺寸丈量

    一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像中的细节信息也主要集中在其高频部分,因此,如何去掉高频干扰同时又保持细节信息是关键.为了去除噪声,有必要对图像进行平滑,可 ...

  7. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 TaskMasger 启动

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [四] 上一篇: [flink]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 Jo ...

  8. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 JobMasger启动 YarnJobClusterEntrypoint

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [三] 上一章:[flink]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yar ...

  9. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 从脚本到主类

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一] 可以去看原文.这里是补充专栏.请看原文 2. 前言 主要针对yarn-per-job模式进行代码分析. ...

最新文章

  1. Python入门 io篇
  2. 自学python可以做什么兼职-一行生财:毕业100天,通过副业赚(挣)到我的第一个10w...
  3. redis windows
  4. 使用Asible批量部署Apache
  5. Qt QWidget实现手势缩放和平移(二)
  6. 小程序 返回多条图文,类似新闻或者博客的展示,其中遇到的bug
  7. 防止P2P终结者的方法
  8. 如何让xtrabackup恢复速度提升20倍?
  9. 聊聊困扰很多同学的一个问题:是否要转方向 ?
  10. 论文阅读(XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network)...
  11. Redisbook学习笔记(3)数据类型之列表
  12. 四川信息职业技术学院计算机多媒体技术,成都市计算机多媒体技术最好学校在哪...
  13. 数据库周刊53丨2020数据风云人物及“年度最佳创新产品奖“揭晓;易鲸捷与平安科技达成战略合作;腾讯云TDSQL品牌升级;SQL等价改写;MySQL数据备份;Redis万字详解……
  14. 麻省理工大学计算机中心,Massachusetts Institute of Technology 麻省理工大学
  15. ORACLE 如何获取uid
  16. Conflunce从JIRA同步用户账户的配置方法
  17. 工程师必看:常见的PCB检测方法有哪些?
  18. 分布式 | 如何通过 dble 的 split 功能,快速地将数据导入到 dble 中
  19. python第三方库matplotlib绘制简单折线图
  20. 多路信号发生器(74LS00和LM324)

热门文章

  1. activiti 文档_Activiti快速入门 kft-activiti-demo
  2. at24c16如何划分出多个读写区_AVR学习笔记九、基于AT24C16的数据存储实验
  3. cesium版本之间如何兼容_【JS】cesium与three.js 结合的栗子,结合了一下网友们的栗子,解决了three.js 高版本模型出不来的问题...
  4. java搜寻范围在哪设定_查找值在Java中的范围
  5. I/O设备与主机的联系方式
  6. 代码行数越少就越“简单”吗?
  7. java 抽象类与接口的区别及其在jdk中的应用
  8. Windows核心编程_窗口蒙版效果
  9. 深度学习之神经网络核心原理与算法-caffekeras框架图片分类
  10. Python学习-20180105