AspectJ - 实现给定接口的类的静态类型间声明

时间:2013-12-03 23:30:54

标签: java aop aspectj

我想知道是否有可能(以及如何......)创建一个静态的类型间声明,该声明适用于实现给定接口的所有类。

在我的用例中,我有一个空接口:

public interface Delegate {}

以及实现它的两个类:

public class DelegateA implements Delegate {...}
public class DelegateB implements Delegate {...}

我想要一个方面来声明DelegateA和DelegateB上的静态成员......以及将实现我的接口的所有未来类!

我该怎么办?如果只有可能......

1 个答案:

答案 0 :(得分:1)

你确定要这么做吗?无论如何,这是我解决问题的最佳解决方案:

public aspect MyAspect pertypewithin(Delegate+){
    public int oneFieldPerClass;
}

这将为Delegate的每个子类型实例化一个方面。您可以通过以下方式访问该字段:

MyAspect.aspectOf(DelegateA.class).oneFieldPerClass = 1;
MyAspect.aspectOf(DelegateB.class).oneFieldPerClass = 2;

Delegate d = new DelegateA(); 
MyAspect.aspectOf(d.getClass()).onFieldPerClass = 3;

以下主题也可能有用:

AspectJ - Creating a global Logger field using an Inter-Type Declaration

HTH,dsp