转载自:http://blog.sina.com.cn/s/blog_4b5bc01101013gok.html

ThreadLocal并不难理解,我总结的最简单的理解就是:

ThreadLocal像其它变量一样(局部、全局、静态)也是一种变量类型,只是他是线程变量,更直白的说他是一种变量作用域,即他的作用域是当前线程(比如用户的一个请求算一个线程),ThreadLocal用于在一个线程间共享。
ThreadLocal的set(String,Object)方法就是设置这个变量的名称、同时给这个变量赋值、当然同时也给予了这个变量的类型。
@SuppressWarnings("unchecked")
public class UserSession { private static final ThreadLocal SESSION_MAP = new ThreadLocal(); protected UserSession() {
} public static Object get(String attribute) {
Map map = (Map) SESSION_MAP.get();
return map.get(attribute);
} public static <T> T get(String attribute, Class<T> clazz) {
return (T) get(attribute);
} public static void set(String attribute, Object value) {
Map map = (Map) SESSION_MAP.get(); if (map == null) {
map = new HashMap();
SESSION_MAP.set(map);
} map.put(attribute, value);
}
}
接下来要做的就是在请求过滤器中:
UserSession.set("user",从session中取出用户信息)
 
然后我们就能在任意的一层service或者dao里:
UserSession.get("user") 获取当前线程的user信息了
 
好处:避免了跨层之间的参数传递,实现了层与层之间的松耦合。
 
 

最新文章

  1. TinyMCE添加图片 路径自动处理成相对路径
  2. 7、provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错
  3. 基于redis排行榜的实战总结
  4. Codeforces 600B Queries about less or equal elements(二分查找)
  5. iOS 屏幕旋转 nav+tabbar+present(网页) 2016
  6. Android 快捷方式
  7. 关于bootstrap--表格(table的各种样式)
  8. 教务处sso设计缺陷
  9. PHP使用Redis
  10. python 模块添加
  11. Postman 官网教程,重点内容,翻译笔记,
  12. [python学习笔记] python程序打包成exe文件
  13. [BC]Four Inages Strategy(三维空间判断正方形)
  14. Oracle中 to_date和to_char用法
  15. [原创] 如何PCB通流能力计算
  16. Codeforces Beta Round #65 (Div. 2)
  17. 微服务负载均衡 —— ribbon
  18. Internal Server Error: /favicon.ico 的解决方法
  19. JZYZOJ1540 BZOJ4035 [ haoi2015 上午] T3 博弈论 sg函数 分块 haoi
  20. mysql索引的建立和使用

热门文章

  1. intellij自动生成java代码注释(java文件注释和方法注释)
  2. JavaScript之setInterval() 函数
  3. 【ASP.NET】编写自己的Web服务器
  4. linux 笔记(一)
  5. HDU 6026 Deleting Edges
  6. 图像 &amp; 视频
  7. [BZOJ4340][BJOI2015]隐身术(后缀数组)
  8. [CF226E]Noble Knight&#39;s Path
  9. [转]关于Java对中文排序的问题
  10. [转]最流行的android组件大全