spring 学习笔记 pointcut&advisor

在spring中定义切入点

如果不能表达在应用系统的什么地方应用 通知的话,通知将毫无用处,这就是切入点的用处。切入点决定了一个特定的类的特定方法是否满足一定的规则。若符合,通知就应用到该方法上。

//Piontcut:切入点:切入点根据方法和类决定何处织入通知。
public interface Pointcut {
	ClassFilter getClassFilter();//类过滤器
	MethodMatcher getMethodMatcher();//方法匹配器
	Pointcut TRUE = TruePointcut.INSTANCE;
}
/*类过滤器ClassFilter接口
实现该接口的类决定了以参数传递进来的类是否应该被通知。实现该接口的类一般根据类名决定,但不一定必须如此。该接口总是包含了一个简单的ClassFilter接口实现-ClassFilter.TRUTE。它是规范的适合任何  类的ClassFilter实例,适合用于只根据方法决定时候符合要求的切入。ClassFilter通过类过滤切面。
*/
public interface ClassFilter {
	boolean matches(Class<?> clazz);
	ClassFilter TRUE = TrueClassFilter.INSTANCE;
}

//方法匹配器 MethodMatcher通过方法过滤切面
public interface MethodMatcher {
/**
根据目标类和方法决定方法是否被通知。因为可以静态的判断,所以可以在AOP代理被创建时候调用一次这个方法。该方法的结果最终决定了通知是否被织入。
**/

	boolean matches(Method method, Class<?> targetClass);// 1
/**
如果1返回true,2被调用来决定MethodMatcher的类型。有两种类型:静态和动态。静态切入点的意思是通知总是被执行。如果一个切入点是静态的,该方法返回false.动态切入点根据运行时方法的参数值决定通知是否需要执行。如果切入点是动态的,该方法返回true。和1.方法类似,该方法也是在代理创建时运行一次。
**/
	boolean isRuntime();//2
/**
如果切入点是静态的,3.永远不会执行,对于动态切入点,需要根据运行时的参数决定方法是否被通知,所以会增加系统的负担,尽量使用静态切入点。
**/
	boolean matches(Method method, Class<?> targetClass, Object[] args);//3
	MethodMatcher TRUE = TrueMethodMatcher.INSTANCE;
}

理解Advisor

大多数切面是由定义切面行为的通知和定义切面在什么地方执行的切入点组合而成的。spring认识到了这一点,提供了Advisor类。他把通知和切入点组合到一个对象中。更确切地说PointcutAdvisor提供了这些功能。

PointcutAdvisor : 通知(行为)+ 切入点,可以把它理解为对通知的包装,增加定义切入点的功能。

public interface PointcutAdvisor{
      Pointcut getPointcut();
      Advice getAdvice();
  }
这样方便在一个地方定义切入点和通知

使用spring的静态切入点 StaticMethodMatcherPointcut
        静态切入点只在代理创建的时候执行一次而不  是在运行期间每次方法调用都执行,所以性能  比动态切入点好,是首选的切入点方式。spring为创建静态切入点提供了方便的父类。 

  NameMatchMethodPointcut:名称匹配切入点方法通知
  public void setMappedName(String);
  public void setMappedNames(String);

<bean id="beforeAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice" ref="myMethodBeforeAdvice"></property>
<property name="mappedNames">
	<list>
	<value>sayHello</value>
	</list>
</property>
</bean>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值