一匣缘、常用的AOP實現(xiàn):
1、使用AspectJ注解或者配置XML去實現(xiàn)AOP
2掺出、使用實現(xiàn)HandlerInterceptor接口或者繼承HandlerInterceptorAdapter類忆首,即使用Spring MVC攔截器去實現(xiàn)AOP忠藤。
二阅爽、使用場景
1路幸、使用AspectJ注解或者配置XML去實現(xiàn)AOP提供了
@Before
@After
@AfterReturning
@AfterThrowing
@Around
使你在時機(jī)上有更多的選擇,也更標(biāo)準(zhǔn)
execution
within
this
target
args
@target
@args
@within
@annotation
Pointcut讓你在使用的位置空間上更加自由
攔截器僅提供pre、post付翁、after三種調(diào)用時機(jī)简肴,而攔截的只能是Http請求的url。
因此使用AspectJ注解或者配置XML去實現(xiàn)AOP提供了更廣泛的應(yīng)用范疇百侧,在不需要對每個請求都進(jìn)行攔截或者需要高度自定義砰识,高度可配置,高度可插拔佣渴,非必要攔截辫狼,就使用這種方式。
2辛润、需要攔截每個請求膨处,比如記錄日志、檢查權(quán)限等等频蛔;需要使用request和response的時候灵迫,使用攔截器處理方便秦叛。
攔截器常見應(yīng)用場景
1晦溪、日志記錄:記錄請求信息的日志,以便進(jìn)行信息監(jiān)控挣跋、信息統(tǒng)計三圆、計算PV(Page View)等。
2避咆、權(quán)限檢查:如登錄檢測舟肉,進(jìn)入處理器檢測檢測是否登錄,如果沒有直接返回到登錄頁面查库;
3路媚、性能監(jiān)控:有時候系統(tǒng)在某段時間莫名其妙的慢,可以通過攔截器在進(jìn)入處理器之前記錄開始時間樊销,在處理完后記錄結(jié)束時間整慎,從而得到該請求的處理時間(如果有反向代理脏款,如apache可以自動記錄);
4裤园、通用行為:讀取cookie得到用戶信息并將用戶對象放入請求撤师,從而方便后續(xù)流程使用,還有如提取Locale拧揽、Theme信息等剃盾,只要是多個處理器都需要的即可使用攔截器實現(xiàn)。
5淤袜、OpenSessionInView:如Hibernate痒谴,在進(jìn)入處理器打開Session,在完成后關(guān)閉Session饮怯。