快速业务通道

Java面向方面编程概述 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
可以在你自己的应用程序上单独运行它。你只有看到它如何工作,才能真正明白一个概念,所以让我们使用JBoss AOP中的例子来说明所有这些东西是如何合作的。在本文剩余的部分,我们将使用AOP构建一个简单的追踪框架。

定义一个监听器

首先要做的是实现我们的小跟踪框架,来定义将做实际工作的监听器。 JBoss AOP中的所有的监听器必须实现org.jboss.aop.Interceptor接口。

public interface Interceptor { public String getName(); public InvocationResponse invoke(Invocation invocation) throws Throwable; }

JBoss AOP中被监听的所有字段、构造器和方法被转化为一个普通的Invocation调用。方法参数被装入一个Invocation对象,然后一个方法、字段访问或者构造器的返回值被装入一个InvocationResponse对象。Invocation对象还驱动监听器链。为了解释清楚,我们来看看在一个例程中所有这些对象如何使用。

import org.jboss.aop.*; import java.lang.reflect.*; public class TracingInterceptor implements Interceptor { public String getName() { return TracingInterceptor; } public InvocationResponse invoke(Invocation invocation) throws Throwable { String message = null; if (invocation.getType() == InvocationType.METHOD) { Method method = MethodInvocation.getMethod(invocation); message = method: + method.getName(); } else if (invocation.getType() == InvocationType.CONSTRUCTOR) { Constructor c = ConstructorInvocation.getConstructor(invocation); message = constructor: + c.toString(); } else { // Do nothing for fields. Just too verbose. return invocation.invokeNext(); } System.out.println(Entering + message); // Continue on. Invoke the real method or constructor. InvocationResponse rsp = invocation.invokeNext(); System.out.println(Leaving + message); return rsp; } }

上面的监听器将监听一个字段、构造器或者方法的所有调用。如果调用类型是一个方法或者构造器,那么带有方法或者构造器签名的跟踪信息将被输出到控制台。

附加一个监听器

好的,这样我们就已经定义好监听器了。但是我们如何把这个监听器附加到一个实际的类中呢?为了实现这个目的,我们需要定义一个切入点(pointcut)。对于JBoss AOP来说,切入点在一个XML文件中被定义。让我们来看看它看起来是什么样的。

<?xml version="1.0" encoding="UTF-8"> <aop> <interceptor-pointcut class="POJO"> <interceptors> <interceptor class="TracingInterceptor" /> </interceptors> </interceptor-pointcut> </aop>

上面的切入点把TracingInterceptor附加到一个名为POJO的类中。这似乎有点麻烦;我们必须为我们想跟踪的每个类创建一个切入点吗?幸运的是,监听器-切入点的类属性可以使用任何正则表达式。因此,如果你想追踪每个JVM加载的类,类的表达式将变为 .*。 如果你只想追踪某个特定的包,那么表达式将是com.acme.mypackge.*。

当独立运行JBoss AOP时,任何适合META-INF/jboss-aop.xml模式的XML文件都将在JBoss AOP运行时间载入。如果相对路径被包含在任何JAR中或者目录被包含在你的CLASSPATH中,特定的XML文件将在启动时被JBoss AOP运行时间载入。

Java面向方面编程概述(3)

时间:2010-12-05

运行例程

我们将使用上面定义的切入点运行这个例程。POJO类如下。

public class POJO { public POJO() {} public void helloWorld() { System.out.println(Hello World!); } public static void m

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号