spring 学习笔记 pointcut&advisor
2013-02-26 14:24
363 查看
在spring中定义切入点
如果不能表达在应用系统的什么地方应用 通知的话,通知将毫无用处,这就是切入点的用处。切入点决定了一个特定的类的特定方法是否满足一定的规则。若符合,通知就应用到该方法上。
理解Advisor
大多数切面是由定义切面行为的通知和定义切面在什么地方执行的切入点组合而成的。spring认识到了这一点,提供了Advisor类。他把通知和切入点组合到一个对象中。更确切地说PointcutAdvisor提供了这些功能。
PointcutAdvisor : 通知(行为)+ 切入点,可以把它理解为对通知的包装,增加定义切入点的功能。
使用spring的静态切入点 StaticMethodMatcherPointcut
静态切入点只在代理创建的时候执行一次而不 是在运行期间每次方法调用都执行,所以性能 比动态切入点好,是首选的切入点方式。spring为创建静态切入点提供了方便的父类。
NameMatchMethodPointcut:名称匹配切入点方法通知
public void setMappedName(String);
public void setMappedNames(String);
如果不能表达在应用系统的什么地方应用 通知的话,通知将毫无用处,这就是切入点的用处。切入点决定了一个特定的类的特定方法是否满足一定的规则。若符合,通知就应用到该方法上。
//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>
相关文章推荐
- Spring中切面的<aop:advisor pointcut="execution参数解析
- Spring学习(十六)----- Spring AOP实例(Pointcut(切点),Advisor)
- Spring学习笔记2-配置相关(context-param&init-param)
- spring aop 学习小插曲 IllegalArgumentException: error at ::0 can't find referenced pointcut xx
- 【linux学习笔记】命令执行判断依据(';'、'&&'、'||')管线命令('|')以及cut、grep命令
- Spring3系列: Spring AOP——Pointcut,Advisor
- [转贴]spring中最强大的Advisor-DefaultPointcutAdvisor
- Spring学习笔记之前置通知&后置通知
- Spring AOP学习笔记(3):AOP返回通知&异常通知&环绕通知
- 使用Spring(15) Spring AOP APIs(NameMatchMethodPointcutAdvisor,RegexpMethodPointcutAdvisor))
- Spring AOP中Pointcut,dvice 和 Advisor三个概念
- SpringAOP学习第一天 @Pointcut注解
- Spring 注解 AOP 出现错误::0 can't find referenced pointcut XXX 的原因
- Spring Aop源码学习--PointCut切入点
- Spring3- Spring AOP——Pointcut,Advisor
- Acegi spring 学习笔记
- Spring学习笔记-Bean初始化&销毁
- Spring 学习笔记 2. 尚硅谷_佟刚_Spring_IOC&DI概述
- Spring学习笔记-Bean初始化&销毁
- ibatis学习笔记(五)>>>>>>>ibatis和Spring整合实例