標籤:
程式圖
描述
ThreadCache類是ThreadLocal<T>類的封裝,UserManagerServlet要求方法裡面建立一個User對象,然後,將對象放到ThreadLocal中,然後,從UserManagerDao獲得該對象,再返回給Servlet
程式
ThreadCache
package com.tgb.util;import com.tgb.entity.User;public class ThreadCache {private static ThreadLocal<User> threadLocal;static {threadLocal= new ThreadLocal<User>();}public static User getUser(){return threadLocal.get();}public static void setUser(User user){threadLocal.set(user);}}
Servlet
package com.tgb.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.tgb.entity.User;import com.tgb.service.UserManagerService;import com.tgb.util.ThreadCache;public class UserManagerServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request,response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {int id = Integer.parseInt(request.getParameter("id"));String name = request.getParameter("name");String password = request.getParameter("password");User user = new User();user.setId(id);user.setName(name);user.setPassword(password);ThreadCache.setUser(user);UserManagerService userManagerService = new UserManagerService();User getUser = userManagerService.getUser();System.out.println(getUser); response.sendRedirect(request.getContextPath() + "/index.jsp");}}
Dao
package com.tgb.dao;import com.tgb.entity.User;import com.tgb.util.ThreadCache;public class UserDao {public User getUser(){return ThreadCache.getUser();}}
增強版Demo 概述 對於上面的demo,非常的簡單,主要是讓大家瞭解ThreadLocal的功能,其在項目中真正的用途是儲存Connection,從達到Service管理事務的目的,下面將給大家介紹一個比較好的demo。 類圖概要
描述 ConnectionContext是資料庫連接對象池,使用的是c3p0; ConnectionPoolManager是ThreadLocal<T>的封裝; TransactionManager是事務的封裝; Filter過濾請求,開啟事務,調用Servlet,最後,Filter提交事務; BaseDao使用泛型和反射,實現簡單的ORM思想,使程式操作的都是對象;
總結 demo2裡面知識點挺多的,是一個比較全面的例子,分頁封裝,json封裝,ThreadLocal,c3p0,事務應用,反射和泛型,自訂註解(demo,沒有應用到項目裡),有興趣的可以下載源碼看看,這裡不做過多介紹。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
java緩衝(2、ThreadLocal<T>)