1

这是我的第一个问题,所以请温柔一点。:-) 我知道 AspectJ 可以在 java的静态初始化程序上创建切入点。但问题是一个方面的静态初始化器如下所示,是否保证只被调用一次:

@Aspect
public class MyAspect {
  private static Map configuration;
  static {
    // Some initialization stuff
    configuration = Config.getConfiguration();
  }
  ... use the "configuration" map in pointcuts and advices
}

换句话说,加载方面是否像加载 java 类一样?这是通过 ClassLoader 完成的吗?我猜是的——而且它似乎有效——但我正在寻找这些方面的保证。

4

1 回答 1

1

AspectJ 使用字节码修改工作。这种修改可以在编译时(“编译时编织”或 CTW)或加载时(“加载时编织”或 LTW)发生。

如果您想确定,那么我建议您使用 aspectj 编译器对您的示例执行 CTW,然后通过javap工具(或类似工具)传递生成的类文件以查看它实际生成的内容。这应该让您放心,它正在(或没有)在做您认为的事情。

于 2010-02-09T09:53:07.487 回答