一、概念
1.Spring的切入点模型使切入点重用独立于建议类型。可以使用相同的切入点来定位不同的建议。
该org.springframework.aop.Pointcut接口是中央接口,用来将通知到特定的类和方法。完整的界面如下所示:
public interface Pointcut {
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
}
将Pointcut接口拆分为两部分允许重用类和方法匹配部分,以及细粒度合成操作(例如与另一个方法匹配器执行“联合”)。
该ClassFilter接口用于将切入点限制为给定的一组目标类。如果matches()方法始终返回true,则将匹配所有目标类:
public interface ClassFilter {
boolean matches(Class clazz);
}
该MethodMatcher接口通常更重要。完整的界面如下所示:
public interface MethodMatcher {
boolean matches(Method m, Class targetClass);
boolean isRuntime();
boolean matches(Method m, Class targetClass, Object[] args);
}
该matches(Method, Class)方法用于测试此切入点是否与目标类上的给定方法匹配。可以在创建AOP代理时执行此评估,以避免需要对每个方法调用进行测试。如果2参数matches方法对给定方法返回true,并且isRuntime()MethodMatcher 的方法返回true,则将在每次方法调用时调用3参数匹配方法。这使切入点能够在执行目标通知之前立即查看传递给方法调用的参数。
大多数MethodMatchers都是静态的,这意味着它们的isRuntime()方法返回false。在这种情况下,永远不会调用3参数匹配方法。
二、使用
SpringAOP在工作中,用的地方主要是拦截器、监控和日志等模块。讲的比较抽象,如果毕竟感兴趣,请参考:
SpingAop详解