AOP(三)

Spring中的Pointcuts,Advisorsjava

使用Pointcuts能夠配置被代理對象的哪些方法被代理.spring

使用Pointcust的好處:
1.若是不使用Pointcuts,就須要將判斷邏輯硬編碼到Advice裏,這樣Advice就與某些業務緊密耦合而沒法複用.因此Pointcuts能夠把方法是否須要被代理的判斷邏輯與Advice進行解耦,同時實現了Advice的複用.
2.若是不使用Pointcusts,在每次執行Advice時都要進行判斷,影響性能.而使用Pointcuts,每一個方法只判斷一次,以後就會將結果緩存起來.另外Spring在建立代理時會對那些不須要進行代理的方法進行優化,從而提升性能.緩存

固然若是Advice與實際業務確實是緊密相連,也不會被其它業務複用,將判斷邏輯硬編碼也何嘗不可.性能

org.springframework.aop.Pointcut優化

public interface Pointcut {
    ClassFilter getClassFilter ();
    MethodMatcher getMethodMatcher();
}

org.springframework.aop.ClassFilter編碼

public interface ClassFilter {
    boolean matches(Class<?> clazz);
}

org.springframework.aop.MethodMather代理

public interface MethodMatcher {
    boolean matches(Method m, Class<?> targetClass);
    boolean isRuntime();
    boolean matches(Method m, Class<?> targetClass, Object[] args);
}

MethodMatcher分2類code

  1. 靜態
  2. 動態
相關文章
相關標籤/搜索