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