先放出这个问题的来源是我在對Controller进行AOP编程的时候遇到的,大致需求是在切面前获取HttpSession中的对象,但是AOP的切面方法又与servlet获取session无关怎么获得呢?又可以延伸出,SpringMVC是怎么获得HttpSession嘚虽然平常我们在编写Controller的时候直接写在方法参数就行了,但是底层大致是怎么实现的呢今天就来探究一下。
看到这个代码业务方面昰解决了,又得到新的问题
方法写的有点多这里我们只关心request这一参数的传递,这里列出每个方法大概的意思,里面有个方法名叫initContextHolders意思是初始化的方法,还记得一开始讲的那个类叫啥不RequestContextHolder,我觉得差不多就要发现真相了。注意两个红框框起来的方法哦
那我们看看这是个啥?哦豁返回了一个servlet获取sessionRequestAttributes,大家都长差不多你有啥不一样?
—————————————————————————————————————————
基本就讲完啦,觉得晕吗再来梳理一遍
2.Frameworkservlet获取session继承了Httpservlet获取session,重写了一堆doGet()doPost()方法,这些重写的方法调用了processRequest()别管上层昰怎么封装的,你在发Http请求的时候肯定会用到这些方法就调用了嘛,然后就触发了这个方法了