您的位置:首页 > 编程语言 > Java开发

JavaWeb 通过配置切换底层存储源

2014-11-29 20:18 393 查看
本文为学习佟刚JavaWeb MVC模式笔记

A 深入理解面向接口编程:在类中调用接口的方法,而不必关心具体的实现。这将有利于代码的解耦。使程序有更好的可移植性和可扩展性



B动态修改Customer的存储方式:通过修改类路径下的switch.properties文件的方式来实现

1 .CustomerServlet中不能在通过privateCustomerDAOcustomerDAO= new CustomerDAOXMLImpl();的方式来写死实现类
2 . 需要通过一个类的一个方法来获取具体的实现类的对象

C  当前 WEB 应用才启动的时候,InitServlet 被创建,并由 Servlet 容器调用其 init() 方法:

1.读取类路径下的switch.properties 文件

2.获取 switch.properties 的 type 属性值

3.赋给了 CustomerDAOFactory 的 type 属性值
InitServlet.java如下:

<span style="font-size:14px;">package com.ali.mvc.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import com.ali.mvc.dao.factory.CustomerFactory;

public class InitServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;

public void init() throws ServletException {

super.init();

// 设置默认值
CustomerFactory.getInstance().setType("jdbc");

// 读取类路径下的switch.properties文件
InputStream in = getServletContext().getResourceAsStream(
"/WEB-INF/classes/switch.properties");
Properties properties = new Properties();
try {
properties.load(in);
// 将获得的type付给CustomerFactory的type
String type = properties.getProperty("type");

if (type != null) {
CustomerFactory.getInstance().setType(type);
} else {
CustomerFactory.getInstance().setType("jdbc");
}
} catch (IOException e) {
e.printStackTrace();
}
}

}
</span>


并需要在web.xml中进行配置:

<span style="font-size:14px;"><servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.ali.mvc.servlet.InitServlet</servlet-class>
<span style="color:#ff6666;"><load-on-startup>1</load-on-startup></span>
</servlet></span>


创建 CustomerServlet 时,为 customerDAO 属性赋值是通过CustomerDAOFactory  的 getCustomerDAO() 方法完成的。此时的 type 已经在 InitServlet 中被赋值了。
<span style="font-size:14px;">public class CustomerServlet extends HttpServlet {

// private CustomerDao customerDao = new CustomerDaoXmlImp();
// private CustomerDao customerDao = new CustomerDaoJdbcImp();
<span style="color:#ff0000;">private CustomerDao customerDao = CustomerFactory.getInstance()
.getCustomerDao();</span>
}
</span>


CustomerFactory.java如下:

<span style="font-size:14px;">package com.ali.mvc.dao.factory;

import java.util.HashMap;
import java.util.Map;

import com.ali.mvc.dao.CustomerDao;
import com.ali.mvc.dao.impl.CustomerDaoJdbcImp;
import com.ali.mvc.dao.impl.CustomerDaoXmlImp;

public class CustomerFactory {

private String type = null;
private Map<String, CustomerDao> daos = new HashMap<String, CustomerDao>();

<span style="color:#ff6600;">private CustomerFactory() {

daos.put("jdbc", new CustomerDaoJdbcImp());
daos.put("xml", new CustomerDaoXmlImp());

}
public CustomerDao getCustomerDao() {
return daos.get(type);
}</span>

private static CustomerFactory instance = new CustomerFactory();

public static CustomerFactory getInstance() {

return instance;
}

public void setType(String type) {
this.type = type;
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息