说明:
(1)一个问题自己要明白:【J2EE中的过滤器】、【Spring 中的AOP】、【Spring MVC中的拦截器】;这三个东西看着挺类似的,但这三者是不同的东西;;;;;只是,有时在面对同一个需求时,使用这三个东西貌似都可以解决,而已;简单说明如下:
●【过滤器】是在J2EE的标准;这个组件的主要作用就是以url为抓手,来处理请求与响应;可以参考【(5)常用功能与过滤器、监听器、FreeMarker;】中的内容;
●【AOP】是在Spring中定义的;其主要作用是以目标类/目标方法为抓手,来给目标类增加功能;可以参考【(15)Spring基础:IoC;AOP;JDBC;】中的内容;;;自然,因为通过【RequestContextHolder】可以获取当前的request对象;所以,如果我们的【AOP】处理的目标类/目标方法是Controller中处理请求与响应的方法的话,那么使用【AOP】技术也可以来处理请求与响应;;;;;这也是为什么本篇博客使用【AOP】技术来实现【打印请求与响应信息的日志】这个需求的原因;
●【拦截器】是Spring MVC的标准组件;这个组件也是以url为抓手,来处理请求与响应的;【拦截器】和【过滤器】功能类似,但二者是两个不同的东西;;;;同时【拦截器】底层最基本的实现,就是依赖于Spring AOP理念的;可以参考【(16)SpringMVC基础:入门,RESTful,拦截器】中的内容;
● 有关【J2EE中的过滤器】、【Spring 中的AOP】、【Spring MVC中的拦截器】三者区别的内容;可以参考【Spring 过滤器 拦截器 AOP区别】,【附加:【J2EE中的过滤器】、【Spring 中的AOP】、【Spring MVC中的拦截器】的区别;(不要看,没写完……)】;
(2)这儿在使用AOP注解开发方式时,第一次介绍了【@Pointcut】注解,以及【@Before("webLog()")】和【@AfterReturning(returning = "res", pointcut = "webLog()")】;积累下来就行;
(3)本篇博客介绍了【RequestContextHolder】,其可以获取当前的request对象;关于【RequestContextHolder】的详细内容,可以参考【附加:RequestContextHolder;(可以实现:在非Controller的方法中,获取HttpServletRequest)】;
问题:为什么要使用AOP统一处理web请求日志?
使用AOP去统一处理web请求日志,这样的系统会更加健壮、简洁、效率高。
目录