zoukankan      html  css  js  c++  java
  • ThreadLocal实现session中用户信息 的线程间共享

     转载自: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信息了
     
    好处:避免了跨层之间的参数传递,实现了层与层之间的松耦合。
     
     
  • 相关阅读:
    Java8新特性之lambda表达式
    查询数据库存在特殊列字段的所有表的表名和字段名
    BigDecimal相关整理
    MyBatis正在爬的坑
    Java面试题整理
    qs库的使用
    配置proxy解决跨域问题
    PDF.js 使用方式
    HTML转义以及防止JS注入攻击
    jquery ajax跨域回调
  • 原文地址:https://www.cnblogs.com/winner-0715/p/6322080.html
Copyright © 2011-2022 走看看