这是我的第一个问题,所以请轻点。-)我知道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完成的吗?我猜是的--这似乎很有效--但我正在寻找这样的保证。
发布于 2010-02-09 09:53:07
AspectJ使用字节码修改。这种修改可能发生在编译时(“编译时编织”,或CTW),或在加载时(“加载时编织”,或LTW)。
如果您想要确定,那么我建议您使用aspectj编译器对您的示例执行CTW,然后通过javap工具(或类似的工具)传递生成的类文件,以查看它实际生成了什么。这应该让你放心,它正在(或不是)做你认为它所做的事情。
https://stackoverflow.com/questions/2228061
复制相似问题