博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
持久层之DAO工厂类
阅读量:7237 次
发布时间:2019-06-29

本文共 4300 字,大约阅读时间需要 14 分钟。

  hot3.png

前言

工厂类,是用来创建对象的。这里不说设计模式啥的,只要知道任何的工厂类都是用来创建对象的。

DAO工厂类,是用来创建DAO对象的,即数据访问对象(关于DAO,见http://my.oschina.net/diedai/blog/533085)

UML

155811_Mmak_1027544.png

示例代码

1、DAO工厂类接口

package com.bigning.db;import com.bigning.Important;import com.bigning.ImportantLevel;/** * DAL 对象生成器 *  * @see AbstractDalFactoryImpl */@Important(ImportantLevel.High)public interface AbstractDalFactory {	/**	 * 创建数据访问对象	 * 	 * @return 生成的Dal对象	 */	public ComDal create();	/**	 * 取得连接生成器工厂	 * 	 * @return 连接工厂	 */	public ConnectionGeneratorFactory getConnectionFactory();}

2、抽象实现

/* * Created on 2006-2-10 */package com.bigning.db;import java.lang.reflect.Constructor;import com.bigning.Important;import com.bigning.ImportantLevel;import com.bigning.db.pool.ConnReleaseListener;import com.bigning.db.pool.PoolableConnectionGenerator;import com.bigning.db.pool.PoolableConnectionGeneratorFactory;import com.bigning.util.ResourceSetting;/** * Dal 对象生成器的抽象实现 * @author fantasy * @see DefaultDalFactory */@Important(ImportantLevel.High)public abstract class AbstractDalFactoryImpl implements AbstractDalFactory{	private class DalFactoryWrapper implements AbstractDalFactory{		ConnectionGeneratorFactory cgf;		Constructor
 dalCtor; Object []args; DalFactoryWrapper(ConnectionGeneratorFactory cgf,Constructor
 dalCtor, Object []args){ this.cgf=cgf; this.dalCtor=dalCtor; this.args=args; } public ComDal create() { try{ return  dalCtor.newInstance(args); }catch(Exception ex){ ex.printStackTrace(); } return null; } public ConnectionGeneratorFactory getConnectionFactory(){ return cgf; } } static Class
 []COMMON_ARG_TYPES={ConnectionGenerator.class}; static Class
 []POOL_ARG_TYPES={PoolableConnectionGenerator.class,ConnReleaseListener.class}; private AbstractDalFactory factory; private ConnectionGeneratorFactory cgf; /**  * 通过连接生成工厂和资源文件来构建一个Dal工厂  * @param cgf 连接生成工厂   * @param rs 资源文件  * @throws Exception  */ public AbstractDalFactoryImpl(ConnectionGeneratorFactory cgf,ResourceSetting rs) throws Exception{ this.cgf=cgf; factory=doBuildFactory(rs); } /**  * 通过资源文件来构建一个工厂  * @param rs 资源文件  * @return 连接生成工厂  * @throws Exception  */ protected  AbstractDalFactory doBuildFactory(ResourceSetting rs) throws Exception { boolean poolable=Boolean.valueOf(rs.getProperty("jdbc.poolable")).booleanValue() ; Class
 dalClass; Class
 []dalArgTypes; Object []args; ConnectionGeneratorFactory x=cgf; if(!poolable){ dalClass=doLoadDalClass(); dalArgTypes=COMMON_ARG_TYPES; args=new Object[]{cgf.create()}; }else{ dalClass=doLoadPoolDalClass(); dalArgTypes=POOL_ARG_TYPES; PoolableConnectionGeneratorFactory cgf2=new PoolableConnectionGeneratorFactory(rs,cgf); args=new Object[]{cgf2.create(),cgf2.getConnectionPool()}; x=cgf2; } Constructor
 dalCtor=(Constructor
)dalClass.getConstructor(dalArgTypes); AbstractDalFactory factory=new DalFactoryWrapper(x,dalCtor,args); return factory; } protected abstract Class
 doLoadDalClass() throws Exception; protected abstract Class
 doLoadPoolDalClass()  throws Exception; public ComDal create() { return factory.create(); } public ConnectionGeneratorFactory getConnectionFactory(){ return cgf; }}

3、实现类

/* * Created on 2004-3-4 * */package com.bigning.db;import com.bigning.Important;import com.bigning.ImportantLevel;import com.bigning.util.ResourceSetting;/** * DAO工厂类,用于创建DAO对象

 *  * 注:该类在配置文件里配置(application.setting.properties)。 * @author Administrator * */@Important(ImportantLevel.Low)public class DefaultDalFactory extends AbstractDalFactoryImpl { /**  * @throws Exception   *   */ public DefaultDalFactory(ConnectionGeneratorFactory f,ResourceSetting rs) throws Exception { super(f,rs); } @SuppressWarnings("unchecked") @Override protected Class

 doLoadDalClass() throws Exception { Class
 dalClass=(Class
) Class.forName("com.bigning.db.AbstractDal"); return dalClass; } @SuppressWarnings("unchecked") @Override protected Class
 doLoadPoolDalClass() throws Exception { Class
 dalClass=(Class
)Class.forName("com.bigning.db.pool.PoolableComDal"); return dalClass; }}

转载于:https://my.oschina.net/diedai/blog/533338

你可能感兴趣的文章
ios 判断字符串为空和只为空格解决办法
查看>>
web项目中加入socket(加强版)
查看>>
ecshop网上商城搭建以及安装和页面问题的解决
查看>>
Java左移运算符, 右移运算符, 无符号右移
查看>>
mysql数据库备份--java代码
查看>>
Linux编译中出现VFS: Cannot open root device "mtdbloc...
查看>>
如何在Heroku上快速度的创建一个项目
查看>>
Java基础——接口&简单工厂
查看>>
一位面试官给IT求职者的意见
查看>>
新手程序员需要知道的一些事
查看>>
第十章 Scala 容器基础(十四):使用map把一个集合转化为另一个
查看>>
学习规划
查看>>
Python调用SqlPlus查询Oracle
查看>>
word中插入不带标号的脚注
查看>>
nodejs配置
查看>>
秋色园QBlog技术原理解析:系列终结篇:最后的AOP策略(十九)
查看>>
TI 官方例程中对3轴加速计获得数据的处理:低通过滤、防抖算法等
查看>>
hadoop使用中遇到的问题
查看>>
VMWare虚拟机安装Windows Server 2008系统(32位)U盘引导
查看>>
Java编程笔试面试题
查看>>