ThreadLocal众所周知的只是在当前线程下共享数据,其实内部是一个map,那么ThreadLocal主要可以再哪些地方用呢,下面我将举一个非常常用的,可以说每个项目中都会使用到,那就是分页:例子如下
当我们在做分页的时候肯定是会在业务层写一个类似方法findAll(,查询参数,int offset,int pageSize),然后Dao层又会出现类似的方法,,如果采用ThreadLocal的话则可省掉分页参数offset,跟pageSize,我们只需要在请求到达Action之前将分页参数存在ThreadLocal中,然后在Dao使用查询语句的时候拿出来,这样可以让你更专注于业务逻辑,在定义接口的时候不再关注过多的分页参数之类杂七杂八的东西,
下面以s2sh为例:
第一步,设计一个SystemContext,用于存放ThreadLocal值,不一定必须得像我这样,可以根据需求自行设计,
package cn.com.leadfar.oa.Utils;
public class SystemContext {
private static ThreadLocal<Integer> offset = new ThreadLocal<Integer>();
private static ThreadLocal<Integer> pagesize =new ThreadLocal<Integer>();
public static int getOffset(){
return offset.get()==null?0:offset.get();
}
public static int getPagesize(){