这是我的第一个问题所以请保持温柔。 :-)我知道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完成的吗?我猜是的 - 它似乎有效 - 但我正在寻找这些方面的保证。
答案 0 :(得分:1)
AspectJ使用字节码修改。这种修改可以在编译时(“编译时编织”或CTW)或加载时(“加载时编织”或LTW)发生。
如果你想确定,那么我建议你使用aspectj编译器在你的例子上执行CTW,然后通过javap
工具(或类似的东西)传递生成的类文件,看看它是什么实际上是生成了。这应该让你放心,它是(或不是)做你认为它做的事情。