一、常用的AOP实现:
1、使用AspectJ注解或者配置XML去实现AOP
2、使用实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类,即使用Spring MVC拦截器去实现AOP。
二、使用场景
1、使用AspectJ注解或者配置XML去实现AOP提供了
@Before
@After
@AfterReturning
@AfterThrowing
@Around
使你在时机上有更多的选择,也更标准
execution
within
this
target
args
@target
@args
@within
@annotation
Pointcut让你在使用的位置空间上更加自由
拦截器仅提供pre、post、after三种调用时机,而拦截的只能是Http请求的url。
因此使用AspectJ注解或者配置XML去实现AOP提供了更广泛的应用范畴,在不需要对每个请求都进行拦截或者需要高度自定义,高度可配置,高度可插拔,非必要拦截,就使用这种方式。
2、需要拦截每个请求,比如记录日志、检查权限等等;需要使用request和response的时候,使用拦截器处理方便。
拦截器常见应用场景
1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。
5、OpenSessionInView:如Hibernate,在进入处理器打开Session,在完成后关闭Session。