java

位置:IT落伍者 >> java >> 浏览文章

Spring的切入点(一 静态Pointcut)


发布日期:2020年04月25日
 
Spring的切入点(一 静态Pointcut)

Pointcut即切入点用于配置切面的切入位置由于Spring中切入点的粒度是方法级因此在Spring AOP中Pointcut的作用是配置哪些类中哪些方法在我们定义的且入点之内哪些方法应该被过滤排除Spring的Pointcut分为静态Pointcut动态Pointcut和用户自定义Pointcut三种其中静态Pointcut只是需要考虑类名方法名动态Pointcut除此之外还要考虑方法的参数以便在运行时可以动态的确定切入点的位置

静态Pointcut

静态即意味着不变例如方法和类的名称因此我们可以根据类和方法的签名来判定那些类的哪些方法在我们定义的切入点之内哪些应该被过滤排除

Spring中定义中如下几个静态Pointcut的实现类介绍如下

NameMatchMethodPointcut只能对方法名进行判别的静态Pointcut实现类

使用范例如下

<beanid=NameMatchMethodPointcutclass=orgspringframeworkaopsupportNameMatchMethodPointcut>

<propertyname=mappedNames>

<list>

<value>pos*</value>

<value>start</value>

</list>

</property>

</bean>

注意post*表示包含所有以pos开始的方法(大小写敏感)

此外NameMatchMethodPointcut还暴露了ClassFilter类型的classFilter属性可以用于指定ClassFilter接口的实现类来设置类过滤器ClassFilter接口的定义如下

packageorgspringframeworkaop;

publicinterfaceClassFilter{

booleanmatches(Classclazz);

ClassFilterTRUE=TrueClassFilterINSTANCE;

}

其中matches方法用于类的匹配参数clazz是需要匹配的目标类匹配成功则返回true

JdkRegexpMethodPointcut使用JDK中定义的正则表达式对方法名进行匹配的静态Pointcut范例如下

<beanid=JdkRegexpMethodPointcut

class=orgspringframeworkaopsupportJdkRegexpMethodPointcut>

<propertyname=patterns>

<list>

<value>*ost</value>

<value>*tart</value>

</list>

</property>

<propertyname=excludedPatterns>

<list>

<value>*tart</value>

</list>

</property>

</bean>

注意*ost正则表达式所有以ost结尾的方法都匹配

在该例中patterns属性是一个javalangSring[]类型的数组表示数组中所有和定义的正则表达式匹配的方法都包含在定义的切入点内excludedPatterns则相反表示被排除于切入点范围的方法同时和NameMatchMethodPointcut一样它也可以用ClassFilter类型的classFilter属性来定义类过滤器

StaticMethodMatcherPointcut一个抽象的静态Pointcut它不能被实例化开发者可以自己扩展该类来实现自定义的切入点

               

上一篇:用Spring AOP实现松散耦合

下一篇:整合SE J2ME SDK与eclipse开发环境