在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请搜索疯狂Java;
Spring的Pointcut分为静态Pointcut、动态Pointcut和用户自定义Pointcut三种,其中静态Pointcut只是需要考虑类名、方法名;动态Pointcut除此之外,还要考虑方法的参数,以便在运行时可以动态的确定切入点的位置。
Spring中切入点的粒度是方法级,因此在Spring AOP中Pointcut的作用是配置哪些类中哪些方法在我们定义的且入点之内、哪些方法应该被过滤排除。
1、静态Pointcut
静态即意味着不变,例如方法和类的名称。因此我们可以根据类和方法的签名来判定那些类的哪些方法在我们定义的切入点之内、哪些应该被过滤排除。
Spring中定义中如下几个静态Pointcut的实现类,介绍如下:
NameMatchMethodPointcut:只能对方法名进行判别的静态Pointcut实现类。
代码示例
<beanid="NameMatchMethodPointcut"
class="org.springframework.aop.support.NameMatchMethodPointcut">
<propertyname="mappedNames">
<list>
<value>pos*</value>
<value>start</value>
</list>
</property>
</bean>
注意:post*表示包含所有以pos开始的方法。
此外,NameMatchMethodPointcut还暴露了ClassFilter类型的classFilter属性,可以用于指定ClassFilter接口的实现类来设置类过滤器。ClassFilter接口的定义如下:
代码示例
packageorg.springframework.aop;
public interfaceClassFilter {
boolean matches(Class clazz);
ClassFilter TRUE =TrueClassFilter.INSTANCE;
}
package org.springframework.aop;
其中matches方法用于类的匹配,参数clazz是需要匹配的目标类,匹配成功则返回true。
2、使用JDK中定义的正则表达式对方法名进行匹配的静态Pointcut——JdkRegexpMethodPointcut
代码示例:
<beanid="JdkRegexpMethodPointcut"
class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<property name="patterns">
<list>
<value>.*ost</value>
<value>.*tart</value>
</list>
</property>
<propertyname="excludedPatterns">
<list>
<value>.*tart</value>
</list>
</property>
</bean>
注意:.*ost正则表达式,所有以ost结尾的方法都匹配。
3、抽象的静态Pointcut——StaticMethodMatcherPointcut,,它不能被实例化。开发者可以自己扩展该类来实现自定义的切入点。