1. 程式人生 > >Aspectj攔截自定義註解方法

Aspectj攔截自定義註解方法

AspectJ是一個面向切面的框架,具體的解釋百度很詳細.這裡是攔截自定義註解,話不多說, 直接上程式碼:

需要的依賴:

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.6</version>
</dependency>

1.自定義註解:
@Documented
@Target({
    ElementType.METHOD
})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test{
    
    int expire() default 60;
    
    Class<?> clazz() default String.class;
    
}

2.重要的是xml的配置, 其實很簡單.

<!--開啟aspectj攔截 -->                                     *必須寫
<aop:aspectj-autoproxy proxy-target-class="true"/>


<!-- 快取攔截器  -->    //此類並不是一個攔截器,具體是一個切面,當aspectj攔截我們自定義的註解時,會執行此類
<bean id="testInterceptor" class="com.*.*.*.TestInterceptor"/>

<!-- aop切面 -->

 <aop:config>

<aop:aspect ref="cacheInterceptor">
<aop:around method="doAround" pointcut="@annotation(com.*.*.annotation.Test)"/>  //@annotation(com.*.*.annotation.Test) 自定義註解的全路徑
</aop:aspect>
</aop:config>

3.切面定義

public class TestInterceptor {

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public Object doAround() throws Throwable {

//@TODO

//具體程式碼,具體業務需求 (此處略)

 return null;

    }

}

4.使用

按照業務需求, 將自定義的註解@Test註解到類上就ok了, 就是這麼簡單.

5.自己遇到的問題

如果測試,aspectj不攔截自定義註解的時候,請檢查你的程式碼是否是在同一個類中被呼叫,如果被自定義註解的類,被呼叫了, 請將此類單獨提出一個新的類,就可以了(自己就是遇到這個問題,找了好久,腦袋都弄過大了,才找到)

具體程式碼是公司的,不好上傳,這裡只是講講具體用法,按照這個步驟就能實現.

有問題的可以評論,會即使回覆的,

希望對你們有所幫助!