inue on. Invoke the real method or constructor.
InvocationResponse rsp = invocation.invokeNext();
System.out.println(Leaving + message);
return rsp;
}
}
Java面向方面编程概述(4)
时间:2010-12-05
运行例 2
POJO类已经做了一些扩展,添加了get()和set()方法。
public class POJO
{
public POJO() {}
public void helloWorld() { System.out.println(Hello World!); }
private int counter = 0;
public int getCounter() { return counter; }
public void setCounter(int val) { counter = val; }
public static void main(String[] args)
{
POJO pojo = new POJO();
pojo.helloWorld();
pojo.setCounter(32);
System.out.println(counter is: + pojo.getCounter());
}
}
TracingInterceptor将监听main()、POJO()和helloWorld()的调用。输出为:
Entering constructor: public POJO()
Leaving constructor: public POJO()
Entering method: helloWorld
Hello World!
Leaving method: helloWorld
你可以在下面的网址下载JBoss AOP和示例代码:
(http://www.jboss.org/index.html?module=html&op=userdisplay&id=developers/projects/jboss/aop)。
编译和执行:
$ cd oreilly-aop/example2
$ export CLASSPATH=.;jboss-common.jar;jboss-aop.jar;javassist.jar
$ javac *.java
$ java -Djava.system.class.loader=org.jboss.aop.standalone.SystemClassLoader POJO
例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。 这两个方法是元数据如何被用于做类级别以外的事情的例子。 元数据也可以应用在实例水平。
Java面向方面编程概述(5)
时间:2010-12-05
附加一个引入
好的,这样我们就已经定义了跟踪接口并实现了混合类。 下一步是把引用附加到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 |