Spring的切入点之二:静态Pointcut的例子

下面以JdkRegexpMethodPointcut为例,通过一个完整的范例展示如何使用静态切入点(完整工程代码见例程4.3)。在工程中我们定义一个People类和一个切面,并将他们在Spring xml配置文件中联系起来。当People对象执行我们切入点中定义的方法时,前置装备LogerPeople将会给出相应的提示信息。

新建一个工程AOP_Test4.3,添加Spring开发库后,新建aop.test包。

创建目标类People,该类有speak、Running、Loving、died四个成员方法。代码如下:

Code


创建一个类名为LogerPeople的前置装备,它实现MethodBeforeAdvice接口,在before方法中利用Log4J输出相关信息,代码如下:

Code


再编写Spring配置文件,完成后如下:

Code


为了让ProxyFactoryBean使用我们定义的JdkRegexpMethodPointcut而不是默认的Pointcut,我们需要配置一个切入点配置器PointcutAdvisor,其advice属性指定装备,Pointcut属性指定切入点。然后再将该切入点配置器注入给ProxyFactoryBean。各个Bean的依赖关系和说明如下:



 附件: 您所在的用户组无法下载或查看附件
图4.4  ProxyFactoryBean代理生成

在JdkRegexpMethodPointcut中,我们使用了它两个属性patterns和excludedPattern:patterns利用正则表达式指定了我们要监视的方法这里是包含了所有的方法;excludedPattern指定了我们要排除的方法,这里指定了以Run开头的方法。

注意:

1)“.*spea.*”表示所有名字以spea开头的方法,例程中是指speak方法;

2)“.*ing” 表示所有名字以ing结束的方法,例程中是指Running和Loving方法;

3)“.*di.*” 表示所有名字以di开头的方法,例程中是指died方法;

4)“.*Run.*” 表示所有名字以Run开头的方法,例程中是指Running方法;

创建含主方法的测试类TestMain,在一种我们从ProxyFactoryBean中获得People实例对象,并一次调用该对象的方法,代码如下:

Code


该类运行结果如下:



 附件: 您所在的用户组无法下载或查看附件
图4.5  例程4.3运行结果

可以看到People类中的speak、Loving、died方法已经被拦截。但是Running方法却没有拦截,这是因为我们在JdkRegexpMethodPointcut中指定其excludedPattern属性把它排除在切入点之外的缘故。


(文/cmzy  出处/http://cmzy.blogjava.net/)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Spring] 的这些文章也感兴趣:

SpringSource提供增强的Spring支持
将Flex与Spring框架集成
Spring Dynamic Modules继续改进
用 Spring MVC 来处理向导式复杂表单
Spring 2.5 中文简明教程下载
Presentation: Introduction to Spring.NET
Spring Mail中文乱码解决办法
什么是Spring
使用 Spring 的JMX annotation 让POJO对象输出到JMX
[CXF]Spring下设置CXF的WebService客户端超时时长