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

来源:互联网 发布:自学虚幻4还是unity3d 编辑:程序博客网 时间:2024/06/02 06:59

本文为学习佟刚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的typeString 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>

0 0