你是否遇到过service层需要request请求对象呢 ? --当然笔者认为这样的编码习惯是不好的编码习惯。
当然本文的重点不是讨论编码习惯的问题。
不多说了,直接上代码吧
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
这样我们就可以在任何地方获取到 HttpServletRequest , HttpServletResponse 对象。
那我们就有一个问题了 。
为什么会达到这样的一个效果呢 ?
那么我们就来分析一下源码,去看一下这样的效果是怎么实现的.
我们先来看一下 RequestContextHolder 对象
看到这里我们就应该明白 其实这就是通过本地线程 (ThreadLocal)去实现的。
我们再来RequestContextHolder#getRequestAttributes 方法。