Spring--AOP 切入點表達式增強

Spring中通過切入點表達式定義具體切入點,其常用AOP切入點表達式定義及說明:
在這裏插入圖片描述

bean 表達式

bean表達式一般應用於類級別,實現粗粒度的切入點定義,案例分析:

  • bean(“userServiceImpl”)指定一個userServiceImpl類中所有方法。
  • bean("*ServiceImpl")指定所有後綴爲ServiceImpl的類中所有方法。

說明:bean表達式內部的對象是由spring容器管理的一個bean對象,表達式內部的內部的名字應該是
spring容器中某個bean的name。

wtthin 表達式

within表達式應用於類級別,實現粗粒度的切入點表達式定義,案例分析:

  • within(“aop.service.UserServiceImpl”)指定當前包中這個類內部的所有方法。
  • within(“aop.service.*”) 指定當前目錄下的所有類的所有方法。
  • within(“aop.service…*”) 指定當前目錄以及子目錄中類的所有方法。

execution 表達式

execution表達式應用於方法級別,實現細粒度的切入點表達式定義,案例分析:
語法:execution(返回值類型 包名.類名.方法名(參數列表))。

  • execution(void aop.service.UserServiceImpl.addUser())匹配addUser方法。
  • execution(void aop.service.PersonServiceImpl.addUser(String)) 方法參數必須爲String的addUser方法。
  • execution(* aop.service….(…)) 萬能配置。

@annotation表達式

@annotaion表達式應用於方法級別,實現細粒度的切入點表達式定義,案例分析

  • @annotation(anno.RequiredLog) 匹配有此註解描述的方法。
  • @annotation(anno.RequiredCache) 匹配有此註解描述的方法。

其中:RequestLog爲我們自己定義的註解,當我們使用@RequiredLog註解修飾業務層方法時,系統底層會在執行此方法時進行擴展操作。

測試(@annotation 表達式)

第一步:定義註解RequiredCache

package com.cy.pj.common.annotation;
/**
 * 自定義註解,一個特殊的類,所有註解都默認繼承Annotation接口
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequiredCache {
   //...
}

第二步:定義SysCacheAspect切面對象。

package com.cy.pj.common.aspect;
@Aspect
@Component
public class SysCacheAspect {
	  @Pointcut("@annotation(com.cy.pj.common.annotation.RequiredCache)")
	  public void doCache() {}
	  @Around("doCache()")
	  public Object around(ProceedingJoinPoint jp)throws Throwable{
		  System.out.println("Get data from cache");
		  Object obj=jp.proceed();
		  System.out.println("Put data to cache");
		  return obj;
	  }
}

第三步:使用@RequiredCache註解對特定業務目標對象中的查詢方法進行描述。

@RequiredCache
	@Override
	public List<Map<String, Object>> findObjects() {.
		return list;
	}

首先定義一個與Cache相關切面,使用註解表達式定義切入點,並使用此註解對需要使用cache的業務方法進行描述。
在該幾個表達式中最常用的是bean表達式和@annotation表達式,其餘兩個可以作爲了解,bean表達式和within都用於類級別,實現粗粒度的切入點表達式定義,而@annotation表達式與execution用於方法級別,實現細粒度的切入點表達式定義。

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