- package ajax.user.language.factory.dao_factory;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.util.Properties;
- /**
- * 这是我个人最近在学JDBC技术时:总结以前别人写过代码开发一个自己个人一个小工具(只针对初学者)
- * 该程序主要是读取配置文件来产生dao层实现对象(采用了反射技术);
- * 程序优点:(1)可以产生DAO层多种不同实现对象(返回Object对象需要强制转换)
- * (2)在多线程模式下也只有一个工厂对象。
- * (3)使用生产dao层实现对象,即使底层实现有JDBC成hibernate或者其他实现,不需要修改代码只需修改配置文件
- * @author kevin Email:wanwei.234@163.com
- * 2010-01-09
- */
- public class DaoFactory {
- /**工厂对象引用*/
- private static DaoFactory daoFactory=null;
- /**dao实现对象引用*/
- private static Object daoImpl=null;
- /**阻止new对象*/
- private DaoFactory(){}
- /**创建工厂对象*/
- public static DaoFactory getDaoFactoryInstance(){
- if(daoFactory==null){
- synchronized(DaoFactory .class){
- if(daoFactory==null){//如果没有这个判断,当两个线程同时访问这个方法会出现创建两个对象
- daoFactory=new DaoFactory();
- }
- }
- }
- return daoFactory;
- }
- /**
- * 这是通过properties文件来产生dao实现类对象
- * properti文件写法:userDao=ajax.user.language.entity.User(这是类的全名);
- * 该方法返回的是一个Object对象,所以在使用时强制转换为你所需要的实现对象。
- * @param key userDao
- * @param filePath properties文件路径
- * @return Object对象
- */
- public Object produceDaoImpObject(String key,String filePath){
- try {
- Properties prop=new Properties();
- InputStream input=new FileInputStream(new File(filePath));
- prop.load(input);
- String daoClass=prop.getProperty(key);
- daoImpl=Class.forName(daoClass).newInstance();
- } catch (Exception e) {
- throw new ExceptionInInitializerError();
- }
- return daoImpl;
- }
- /**
- *通过配置文件名称读取src目录的的配置文件
- * @param key
- * @return Object对象
- */
- public Object produceDaoImpObjectOverFileName(String key,String FileName){
- try {
- Properties prop=new Properties();
- InputStream input=DaoFactory.class.getClassLoader().getResourceAsStream(FileName);
- prop.load(input);
- String daoClass=prop.getProperty(key);
- System.out.println(daoClass);
- daoImpl=Class.forName(daoClass).newInstance();
- } catch (Exception e) {
- e.printStackTrace();
- throw new ExceptionInInitializerError();
- }
- return daoImpl;
- }
- }
package ajax.user.language.factory.dao_factory;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
/**
* 这是我个人最近在学JDBC技术时:总结以前别人写过代码开发一个自己个人一个小工具(只针对初学者)
* 该程序主要是读取配置文件来产生dao层实现对象(采用了反射技术);
* 程序优点:(1)可以产生DAO层多种不同实现对象(返回Object对象需要强制转换)
* (2)在多线程模式下也只有一个工厂对象。
* (3)使用生产dao层实现对象,即使底层实现有JDBC成hibernate或者其他实现,不需要修改代码只需修改配置文件
* @author kevin Email:wanwei.234@163.com
* 2010-01-09
*/
public class DaoFactory {
/**工厂对象引用*/
private static DaoFactory daoFactory=null;
/**dao实现对象引用*/
private static Object daoImpl=null;
/**阻止new对象*/
private DaoFactory(){}
/**创建工厂对象*/
public static DaoFactory getDaoFactoryInstance(){
if(daoFactory==null){
synchronized(DaoFactory .class){
if(daoFactory==null){//如果没有这个判断,当两个线程同时访问这个方法会出现创建两个对象
daoFactory=new DaoFactory();
}
}
}
return daoFactory;
}
/**
* 这是通过properties文件来产生dao实现类对象
* properti文件写法:userDao=ajax.user.language.entity.User(这是类的全名);
* 该方法返回的是一个Object对象,所以在使用时强制转换为你所需要的实现对象。
* @param key userDao
* @param filePath properties文件路径
* @return Object对象
*/
public Object produceDaoImpObject(String key,String filePath){
try {
Properties prop=new Properties();
InputStream input=new FileInputStream(new File(filePath));
prop.load(input);
String daoClass=prop.getProperty(key);
daoImpl=Class.forName(daoClass).newInstance();
} catch (Exception e) {
throw new ExceptionInInitializerError();
}
return daoImpl;
}
/**
*通过配置文件名称读取src目录的的配置文件
* @param key
* @return Object对象
*/
public Object produceDaoImpObjectOverFileName(String key,String FileName){
try {
Properties prop=new Properties();
InputStream input=DaoFactory.class.getClassLoader().getResourceAsStream(FileName);
prop.load(input);
String daoClass=prop.getProperty(key);
System.out.println(daoClass);
daoImpl=Class.forName(daoClass).newInstance();
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError();
}
return daoImpl;
}
}
- 测试类:
测试类:
- package ajax.user.language.dao.impl;
- import ajax.user.language.entity.Student;
- import ajax.user.language.factory.dao_factory.DaoFactory;
- public class Test {
- public static void main(String[] args) {
- DaoFactory daoFactory=DaoFactory.getDaoFactoryInstance();
- //StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObjectOverFileName("StudentDaoImpl","daoconfig.properties");
- //StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObject("StudentDaoImpl","D://newapps//workspace//ajax//src//daoconfig.properties");
- StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObject("StudentDaoImpl","src/daoconfig.properties");
- Student s1=new Student();
- s1.setId("stu1");
- s1.setName("zhangsan");
- s1.setSex("F");
- try {
- stuImpl.addStudent(s1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
package ajax.user.language.dao.impl;
import ajax.user.language.entity.Student;
import ajax.user.language.factory.dao_factory.DaoFactory;
public class Test {
public static void main(String[] args) {
DaoFactory daoFactory=DaoFactory.getDaoFactoryInstance();
//StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObjectOverFileName("StudentDaoImpl","daoconfig.properties");
//StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObject("StudentDaoImpl","D://newapps//workspace//ajax//src//daoconfig.properties");
StuDaoImpl stuImpl=(StuDaoImpl)daoFactory.produceDaoImpObject("StudentDaoImpl","src/daoconfig.properties");
Student s1=new Student();
s1.setId("stu1");
s1.setName("zhangsan");
s1.setSex("F");
try {
stuImpl.addStudent(s1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
配置文件:daoconfig.properties
- StudentDaoImpl=ajax.user.language.dao.impl.StuDaoImpl