面向方面编程慨述和JBoss(4)
2006-12-23 22:17
253 查看
例3.使用引入
如果我们可以关闭或者打开指定实例的跟踪,那么将会非常理想。 JBoss AOP有一个应用程序接口把元数据附加到一个对象实例中,但是让我们假装一个实际的跟踪应用程序接口是最佳解决方案。 在本例中,我们将通过使用一个引入改变POJO类本身的定义。 我们将强制POJO类实现一个跟踪接口,并且提供一个混合类来处理新的跟踪应用程序接口。 下面是这个跟踪接口:
定义一个混合类
面向形式Tracing接口将在一个混合类中实现。当一个POJO被实例化的时候,这个混合类的一个实例将被附加到这个POJO类中。下面是实现:
enableTracing ()方法附加过滤属性到这个对象实例上。 disableTracing ()方法做相同的事情,但是把filter属性设置为false。 这两个方法是元数据如何被用于做类级别以外的事情的例子。 元数据也可以应用在实例水平。
附加一个引入
好的,这样我们就已经定义了跟踪接口并实现了混合类。 下一步是把引用附加到POJO类。至于监听器,我们必须在XML中定义另一个切入点。让我们看看这个XML。
上面的切入点将强制POJO类来实现Tracing接口。 现在,当POJO的一个实例被实例化,TracingMixin的一个实例也将被实例化。 TracingMixin被实例化的方法在<construction>标记中被定义。 你可以在<construction>标记中放入任何一行你想放入的Java代码。
运行例 3
POJO类又被扩展了一些,现在Tracing应用程序接口可以被访问。TracingInterceptor还没有改变,保持在例2中的样子。
注意,我们可以把POJO的类型强制转化为Tracing接口。输出为:
注意,添加到TracingInterceptor的监听器-切入点也应用于被Tracing引入引入的方法。
编译并且运行这个例子:
结论
面向Aspect编程是用于软件开发的一个功能强大的新工具。 使用JBoss 4.0,你可以实现你自己的监听器、元数据和引入,使你的软件开发过程更加高效。 访问www.jboss.org得到更多的详细技术资料。
如果我们可以关闭或者打开指定实例的跟踪,那么将会非常理想。 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); } } |
附加一个引入
好的,这样我们就已经定义了跟踪接口并实现了混合类。 下一步是把引用附加到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> |
运行例 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(); } } |
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 |
编译并且运行这个例子:
$ 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得到更多的详细技术资料。
相关文章推荐
- 面向方面编程慨述和JBoss(2)
- 面向方面编程慨述和JBoss(3)
- 面向方面编程(AOP)和JBoss
- 面向方面编程AOP和JBoss
- 面向方面编程(AOP)和JBoss(二)
- AOP 面向方面编程(面向切面)
- AOP 面向方面编程的介绍----基本概念(2)
- SPRING--Spring中IOC(反转控制) 和 AOP(面向方面编程)
- 体验Java 1.5中面向方面(AOP)编程
- spring的面向方面编程
- 你听说过PHP 的面向方面编程吗?
- Spring Framework中的面向方面编程(AOP),第二部分
- AOP面向方面(切面)编程
- 自行打造实现控制反转容器(IOC)与面向方面编程(AOP)的轻量级Framework(4)
- NODEJS 的面向方面编程 shimmer
- 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)
- 第五章 面向方面编程___通知类型
- AOP面向方面(切面)编程
- AOP面向方面编程