在介绍了上面的例子后,我们来深入的研究一下AOP的一些基本概念。
1 切入点(Pointcut)
它是一些位置的集合,什么样的位置呢,是需要加入advice的位置集合。
2 通知(advice)
指在切入点处要加入的代码
3 Advisor
它是Pointcut和advice的集合,是将advice注入到Pointcut的代码
在Spring中提供了三种切入点,分别是静态切入电、动态切入点和自定义切入点。
1 静态切入点
静态切入点只限于给定的方法和目标类,而不考虑方法的参数。在Spring中,使用org.springframework.aop.support.RegexpMethodPointcut可以实现静态切入点。下面我们看一下代码
<bean id ="settersAndAbsquatulatePointcut"
class="org.springframework.aop.support.RegexpMethodPointcut">
<pjroperty name="patterns">
<list>
<value>.*save.*</value>
<value>.*do.*</value>
</list>
</property>
</bean>
2 动态切入点
于静态切入点不同,动态切入点不仅可以指定方法和类,还可以指定方法的参数,同时因为参数的变化,所以动态切入点不能缓存,需要每次调用的时候都要进行计算,损耗比较大。动态切入点的常见例子是控制流切入点。
关于控制流切入点:
Spring控制流切入点在概念上和AspectJ的cflow 切入点很相似, 虽然它的功能不如后者那么强大。(目前还不能让一个切入点在另外一个切入点所评估的连接点处执行)。 一个控制流切入点匹配当前的调用栈。例如,一个连接点被com.mycompany.web包内的一个 方法或者SomeCaller类调用,切入点就可能被激活。 控制流切入点是由org.springframework.aop.support.ControlFlowPointcut 类声明的。
同时注意:在执行时控制流切入点的开销是非常昂贵的,甚至与其它动态切入点比起来也是如此。在Java 1.4里,它的开销差不多是其它动态切入点的5倍;在Java 1.3中,这个比例甚至达到10倍动态切入点用的比较少。
3 自定义切入点
因为在Spring AOP中的切入点是Java类而不是语言的特性(后者像AspectJ中那样),所以可以声明自定义的切入点,不论是静态还是动态的。自定义切入点在Spring里可能很强大。即使这样我们仍推荐尽可能使用AspectJ切入点表达式语言。
1 切入点(Pointcut)
它是一些位置的集合,什么样的位置呢,是需要加入advice的位置集合。
2 通知(advice)
指在切入点处要加入的代码
3 Advisor
它是Pointcut和advice的集合,是将advice注入到Pointcut的代码
在Spring中提供了三种切入点,分别是静态切入电、动态切入点和自定义切入点。
1 静态切入点
静态切入点只限于给定的方法和目标类,而不考虑方法的参数。在Spring中,使用org.springframework.aop.support.RegexpMethodPointcut可以实现静态切入点。下面我们看一下代码
<bean id ="settersAndAbsquatulatePointcut"
class="org.springframework.aop.support.RegexpMethodPointcut">
<pjroperty name="patterns">
<list>
<value>.*save.*</value>
<value>.*do.*</value>
</list>
</property>
</bean>
2 动态切入点
于静态切入点不同,动态切入点不仅可以指定方法和类,还可以指定方法的参数,同时因为参数的变化,所以动态切入点不能缓存,需要每次调用的时候都要进行计算,损耗比较大。动态切入点的常见例子是控制流切入点。
关于控制流切入点:
Spring控制流切入点在概念上和AspectJ的cflow 切入点很相似, 虽然它的功能不如后者那么强大。(目前还不能让一个切入点在另外一个切入点所评估的连接点处执行)。 一个控制流切入点匹配当前的调用栈。例如,一个连接点被com.mycompany.web包内的一个 方法或者SomeCaller类调用,切入点就可能被激活。 控制流切入点是由org.springframework.aop.support.ControlFlowPointcut 类声明的。
同时注意:在执行时控制流切入点的开销是非常昂贵的,甚至与其它动态切入点比起来也是如此。在Java 1.4里,它的开销差不多是其它动态切入点的5倍;在Java 1.3中,这个比例甚至达到10倍动态切入点用的比较少。
3 自定义切入点
因为在Spring AOP中的切入点是Java类而不是语言的特性(后者像AspectJ中那样),所以可以声明自定义的切入点,不论是静态还是动态的。自定义切入点在Spring里可能很强大。即使这样我们仍推荐尽可能使用AspectJ切入点表达式语言。