论坛首页 Java企业应用论坛

spring 学习笔记------PointCut接口

浏览 3000 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-23   最后修改:2009-04-23
学习spring 里的PointCut Interface接口
1.什么是切入点:
概念:一个切入点是用来定义某一个通知该何时执行的一组联结点。再者什么是联结点呢,联结点就是程序执行过程中的一个特定点。
2.spring 里的切入点的接口:

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


这个getClassFilter()方法顾名思意是用来取得类过滤器的,getMethodMatcher()这个方法是用来的取得方法匹配器的。spring里提供了一些实现的切入点。
3.ClassFilter接口:
public interface ClassFilter {
	
    boolean matches(Class clazz);

}
该接口只定义了一个方法,其参数class代表被检测类的实例,如何切入点适用于该类那么match()方法返回true;否侧返回false;

4.MethodMatcher:接口

public interface MethodMatcher {
	
	boolean matches(Method method, Class targetClass);
	
	boolean isRuntime();
	
	boolean matches(Method method, Class targetClass, Object[] args);
	
	MethodMatcher TRUE = TrueMethodMatcher.INSTANCE;

}

spring 支持两种不同的MethodMatcher,静态的和动态的,一个MethodMatcher是哪一种取决于isRuntime()方法返回值,在使用MethodMatcher之前,spring会调用isRuntime()方法,如果返回false,那么就是静态的MethodMatcher,如果返回true。那么就是动态的。如果切入点是静态的,那么spring会对目标类的每一个方法调用一次matchesmethod,class);其返回值将被缓冲起来方便日后调用该方法时适用,这样,对每个方法的适用性的测试只会进行一次。之后调用该方法是将不再调用matches();如果切入点是动态的,那么spring仍然会在目标方法第一次调用时用matches(Method methhod,Class class);进行一个静态的测试来检查其总的适用性。不过,如果该测试返回true,那么在次基础上,每次该方法调用时 spring 会再次调用matcher(Method ,Class , Object[]);方法,这样,一个动态的MethodMatcher可以根据一次具体的方法调用,而不仅仅是方法本身,来决定切入点是否适用。显然,静态切入点的性能比动态切入点的性能要好的多,所以建议尽量用静态切入点。
5.已经实现的PointCut
	a.ComposablePointcut
	b.ControlFlowPointcut
	c.DynamicMethodMatcherPointcut
	d.JdkRegexpMethodPointcut
	e.NameMatchMethodPointcut
	f.Perl5RegexpMethodPointcut
	g.StaticMethodMatcherPointcut




   发表时间:2009-04-24  
AOP的程序理解起来太困难了,以后维护你程序的人非傻不可.

究竟有啥理由非要加这个东西呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics