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不攔截自定義註解的時候,請檢查你的程式碼是否是在同一個類中被呼叫,如果被自定義註解的類,被呼叫了, 請將此類單獨提出一個新的類,就可以了(自己就是遇到這個問題,找了好久,腦袋都弄過大了,才找到)
具體程式碼是公司的,不好上傳,這裡只是講講具體用法,按照這個步驟就能實現.
有問題的可以評論,會即使回覆的,
希望對你們有所幫助!