利用工厂模式实现serveice和dao层的解耦,这样就可以不用在service层实例化dao层的对象,当dao层代码发生改变的时候(数据库实现发生改变)直接修改配置文件就不用改变service层的代码。
配置文件:dao.properties
UserDao="com.dao.UserDaoJdbcImp" 如果是oracle实现就可以修改配置文件就行
源代码:DaoFactory.java
1 package com.demo;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.Properties;
6
7 import org.hamcrest.Factory;
8
9 //利用工厂模式实现业务层与DAO层解耦
10 public class DaoFactory {
11 private static Properties daoConfig = new Properties();
12 private static DaoFactory factory = new DaoFactory();
13 private DaoFactory(){
14 //加载配置文件
15 InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("dao.properties");
16
17 try {
18 daoConfig.load(in);
19 } catch (IOException e) {
20 throw new RuntimeException();
21 }
22 }
23
24 //获取工厂对象
25 public static DaoFactory getInstance(){
26 return factory;
27 }
28
29 public static <T> T createDao(Class<T> clazz){//这里传进来的是DAO接口
30 String name = clazz.getSimpleName();//UserDao
31 String className = daoConfig.getProperty(name);
32 try {
33 T dao = (T) Class.forName(className).newInstance();
34 return dao;
35 } catch (Exception e) {
36 throw new RuntimeException(e);
37 }
38 }
39 }