您的位置:首页 > 编程语言

面向方面编程慨述和JBoss(4)

2006-12-23 22:17 253 查看
例3.使用引入

  如果我们可以关闭或者打开指定实例的跟踪,那么将会非常理想。 JBoss AOP有一个应用程序接口把元数据附加到一个对象实例中,但是让我们假装一个实际的跟踪应用程序接口是最佳解决方案。 在本例中,我们将通过使用一个引入改变POJO类本身的定义。 我们将强制POJO类实现一个跟踪接口,并且提供一个混合类来处理新的跟踪应用程序接口。 下面是这个跟踪接口:

public interface Tracing
{
public void enableTracing();
public void disableTracing();
}
  定义一个混合类

  面向形式Tracing接口将在一个混合类中实现。当一个POJO被实例化的时候,这个混合类的一个实例将被附加到这个POJO类中。下面是实现:

import org.jboss.aop.Advised;

public class TracingMixin implements Tracing
{
Advised advised;

Public TracingMixin(Object obj)
{
this.advised = (Advised)obj;
}

public void enableTracing()
{
advised._getInstanceAdvisor().getMetaData().addMetaData(
"tracing", "filter", true);
}

public void disableTracing()
{
advised._getInstanceAdvisor().getMetaData().addMetaData(
"tracing", "filter", false);
}
}
  enableTracing ()方法附加过滤属性到这个对象实例上。 disableTracing ()方法做相同的事情,但是把filter属性设置为false。 这两个方法是元数据如何被用于做类级别以外的事情的例子。 元数据也可以应用在实例水平。

  附加一个引入

  好的,这样我们就已经定义了跟踪接口并实现了混合类。 下一步是把引用附加到POJO类。至于监听器,我们必须在XML中定义另一个切入点。让我们看看这个XML。

<?xml version="1.0" encoding="UTF-8">
<aop>
<introduction-pointcut class="POJO">
<mixin>
<interfaces>Tracing</interfaces>
<class>TracingMixin</class>
<construction>new TracingMixin(this)</construction>
</mixin>
</introduction-pointcut>
</aop>
  上面的切入点将强制POJO类来实现Tracing接口。 现在,当POJO的一个实例被实例化,TracingMixin的一个实例也将被实例化。 TracingMixin被实例化的方法在<construction>标记中被定义。 你可以在<construction>标记中放入任何一行你想放入的Java代码。

  运行例 3

  POJO类又被扩展了一些,现在Tracing应用程序接口可以被访问。TracingInterceptor还没有改变,保持在例2中的样子。

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

public static void main(String[] args)
{
POJO pojo = new POJO();
Tracing trace = (Tracing)this;
pojo.helloWorld();

System.out.println("Turn off tracing.");

trace.disableTracing();
pojo.helloWorld();

System.out.println("Turn on tracing.");

trace.enableTracing();
pojo.helloWorld();
}
}
  注意,我们可以把POJO的类型强制转化为Tracing接口。输出为:

Entering constructor: POJO()
Leaving constructor: POJO()
Entering method: helloWorld
Hello World!
Leaving method: helloWorld
Turn off tracing.
Entering method: disableTracing
Leaving method: disableTracing
Hello World!
Turn on tracing.
Entering method: helloWorld
Hello World!
Leaving method: helloWorld
  注意,添加到TracingInterceptor的监听器-切入点也应用于被Tracing引入引入的方法。

  编译并且运行这个例子:

$ cd oreilly-aop/example3
$ export CLASSPATH=.;jboss-common.jar;jboss-aop.jar;javassist.jar
$ javac *.java
$ java -Djava.system.class.loader=org.jboss.aop.standalone.SystemClassLoader POJO
  结论

  面向Aspect编程是用于软件开发的一个功能强大的新工具。 使用JBoss 4.0,你可以实现你自己的监听器、元数据和引入,使你的软件开发过程更加高效。 访问www.jboss.org得到更多的详细技术资料。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: