熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

通過注解簡化spring aop織入點的指定

2013-11-23 18:40:18  來源: Java核心技術 
    大型Java web應用往往有很大的系統訪問量為了保護服務器免於出現過載的情況一般都需要對流量進行控制對於web頁面的訪問一般通過配置服務器或者apache可以起到保護的作用但是對於webservice在負載均衡之外還需要一些手段來防止系統過載這些手段需要通過服務器端編碼實現
   
    一般地實現這類監控一般選擇是用aop的方式在不影響功能代碼的情況下進行這裡spring aop是一個通常的選擇無論通過xml配置的方式還是使用AspectJspring aop都必須由開發者通過代碼形式確定織入點對於小型webservice應用來
   
    說如果將一系列webservice接口放在同一的包中那麼配置還相對簡單但對於一個相對較大的webservice應用他的配置將變得非常繁瑣並且對於個性化的需求並不好處理
   
    AspectJ定義織入點是可以通過使用比如execution within target等函數聲明切入點這些函數就不一一解釋了這裡要說明的是使用execution與annotation配合實現自定義織入點的方法方便靈活地配置需要監控的方法
   
    先把代碼貼上來
   
    注解定義如下
   
    @Target({ElementTypeMETHOD})
   
    @Retention(RetentionPolicyRUNTIME)
   
    public @interface Monitor {
   
    String value() default ;
   
    }
   
    這樣就可以在目標方法上使用注解了
   
    切面
   
    @Aspect
   
    public class MonitorInterceptor {
   
    @Around(execution(* ***()) && @annotation(monitor)
   
    public void doMonitor (ProceedingJoinPoint joinPoint Monitor monitor) {
   
    //業務代碼
   
    }
   
    }
   
    execution(* ***())表示執行任何方法
   
    @annotation(monitor)表示方法上帶有Monitor注解的
   
    當滿足這兩個條件時即時滿足條件的切入點
   
    使用這種方式在doMonitor方法中必須要有一個Monitor類型的入參否則會拋出異常(試試就知道了)
   
    如果不想使用這種方式可以考慮使用
   
    @Around(execution(@Monitor * ***())
   
    接下來只要將目標webservice做為一個bean加載到spring容器中並且配置使用aspectJ即可如下
   
    <?xml version=
   
    encoding=UTF?><beans xmlns=/schema/beans
   
    xmlns:xsi=//XMLSchemainstance
   
    xmlns:context=/schema/context
   
    xmlns:aop=/schema/aop
   
    xsi:schemaLocation=/schema/context /schema/context/springcontextxsd
   
    /schema/beans /schema/beans/springbeansxsd
   
    /schema/aop /schema/aop/springaopxsd>
   
    <aop:aspectjautoproxy /></beans>
   
    測試類
   
    public class Test {
   
    @Monitor
   
    public void test {
   
    //業務代碼
   
    }
   
    }
   
    只要將Test類配置入spring就能發現aop生效了
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25552.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.