在反编译的 aspecj 代码中看到的这个数字是多少?

What is this number which is seen in the decompiled aspecj code?

我编译编织了java和aj文件。 然后我将 class 文件反编译为每个 java 和 aj 文件。

从恢复的文件中,我可以看到相同的数字“$1$8e6adf60”。

反编译java

CarAspect.aspectOf().ajc$before$car_CarAspecte6adf60();

反编译aj

public void ajc$before$car_CarAspecte6adf60()
{
    System.out.println("The car color has changed!");
}

你能告诉我这个数字是什么意思吗?

我可以用这个数字来阐明独特的编织吗?

提前感谢您的建议。

吴.

第一个美元后面的数字是方面内的建议编号。第二个美元后面的数字是与建议相关的切入点文本的哈希码。例如:

public aspect Code {
  before(): execution(* *(..)) {}
  before(): execution(* *(..)) {}
  before(): execution(* m(..)) {}
}

javap Code.class

public void ajc$before$Code44dde4();
public void ajc$before$Code44dde4();
public void ajc$before$Code$a6998f81();

建议编号 1、2 和 3。请注意,前两个建议成员的哈希码元素相同,因为切入点相同。

Can I use this number to clarify the unique weaving?

不太清楚你的意思,但希望你能根据我的描述算出你是否可以

数字的历史...

我们 (AspectJ) 实际上使用这些数字来使增量编译更快。原来我们是使用原切面源文件中advice的'source line'作为名称后缀。那是非常脆弱的。如果您只是在文件的开头添加了一个空行,那么所有生成的方面成员都会更改名称,因为这个数字发生了变化(行号增加了)。如果发生这种情况,那么我们必须重新编织整个系统,因为必须更新对这些人的所有调用。我们需要更强大的东西。所以我们想出了这个。使用第一个数字意味着具有相同切入点文本的两个之前建议没有冲突的名称。结合第二个数字,我们有一个名称,如果您更改源方面的白色 space,该名称将不会更改。唯一真正改变它的是如果你改变切入点 - 当然,如果你改变切入点那么我们需要重新编织所有东西,因为它现在可能匹配 more/less 比以前。