0

几周前,我正在寻找一种方法来为 java 类的文件创建一些字符串常量->使用 maven 为类属性生成常量?

我让它工作了。我创建了一个包含常量的方面并将它们编织到类文件中。现在的问题是,我的客户在尝试使用编织类时会收到 NoClassDefFound 异常。有两个原因:

  1. 我在构建过程中从客户端 jar 中删除了方面 .class 文件

  2. 他们的类路径中没有 aspectj 库

使用反编译器,我发现该类有一个像这样的静态块:

static {
CarDTOAspect.ajc$interFieldInit$my.package.CarDTOAspect$my.package.CarDTO$VENDOR(); 
CarDTOAspect.ajc$interFieldInit$my.package.CarDTOAspect$my.package.CarDTO$NAME();
}

我的问题: 编织过程中是否有一个选项,可以在我的类文件中创建真正的“公共静态最终字符串”-Field,以便我可以完全摆脱客户端 jar 中的方面?

提前致谢

马丁

4

1 回答 1

2

很不幸的是,不行。这不是 AspectJ 的设计目的。类型间声明必须实际存在于 Aspect 中(在目标类型中生成引用)。这是因为范围规则可能允许将两个同名字段添加到目标类型。例如:

class C { }
aspect A1 { private int C.field = 9; }
aspect A2 { private String C.field = "what???"; }

这是完全合法的。两个字段都不能在C. 它们只能在声明它们的方面内部访问。

如果您正在寻找进行字节码操作,那么我会推荐 ASM 或 Javassist 之类的东西。

于 2011-04-21T16:13:54.270 回答