Spring Aspectj

Spring Aspectj

maven jar

<aspectj-version>1.8.2</aspectj-version>

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>${aspectj-version}</version>
</dependency>

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>${aspectj-version}</version>
</dependency>

測試感覺spring-aop 和 spring-aspects 貌似沒什麼用

aspectjweaver 1.8.10 和 spring 4.3.2.RELEASE 有衝突

spring xml

<aop:aspectj-autoproxy proxy-target-class="true" />

如果針對Controller層,需要在spring-mvc中配置,否則不會起作用
配置在spring.xml 中會對service和dao層起作用

aspectJ

@Around 修改傳入參數

aspectJ 基於 @Annotation的使用

  1. 定義註解
    @Retention(RetentionPolicy.RUNTIME)
    @Target(value = ElementType.METHOD)
    public @interface WriteLog {
      public String value() default "";
    }
  1. 在需要攔截的地方加入註解
    @WriteLog(value = "用戶{}做了什麼操作")
    public String init(HttpServletRequest request, Model model) {
        //TODO 業務處理
        return "tierOneManager/project/list";
    }
  1. AspectJ 編織處理
    @Before(value = "execution(* com.xxx.web.xxx..*(..))&&args(request)&&@annotation(writeLog)", argNames = "joinPoint,request,writeLog")
    public void insertLog(JoinPoint joinPoint, HttpServletRequest request, WriteLog writeLog)
      throws NoSuchMethodException {
        if (null == writeLog) {
          return;
        }
        String messageTpl = writeLog.value();
        System.out.println(messageTpl);
        System.out.println("xxx");
    }

參考網站

http://www.cnblogs.com/ssslinppp/p/5845659.html#_labelTop

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章