是否可以围绕类级别变量创建AspectJ切入点?

时间:2016-07-21 08:48:00

标签: java aspectj aspectj-maven-plugin

我正在寻找的是一种在类级别变量周围指定切入点的方法。类似的东西:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.FIELD)
@interface MyPointCut
{
}

public class Foo
{

    @MyPointCut
    BarAPI api = new BarAPI();

}

@Aspect
public class MyAspect
{
    @Around(value="execution(* *(..)) && @annotation(MyPointCut)")
    public Object doSomethingBeforeAndAfterEachMethodCall()
    {
        ...
    }
}

我希望有一个方面可以在api字段的每个方法调用之前和之后执行一些工作。 这可行吗?能否请您指出一些我可以阅读如何操作的文档?

1 个答案:

答案 0 :(得分:2)

这有点像简单地在BarAPI类型的所有方法上提供执行建议,但不同之处在于您只关心BarAPI的特定实例而不是所有实例。

// Call to any BarAPI method from the type Foo
Object around(): call(* BarAPI.*(..)) && within(Foo) { ... }

cflow有点“重”'为此,我们可以做一些更轻松的事情:

// Assume Foo has an annotation on it so it is more general than type Foo.
@HasInterestingBarAPIField
public class Foo { ... }

Object around(): call(* BarAPI.*(..)) && @within(HasInterestingBarAPIField) { ... }

那样的东西怎么样但更普遍适用:

{{1}}