gpt4 book ai didi

java - AspectJ @DeclareMixin,未由接口(interface)声明的方法不会被编织

转载 作者:行者123 更新时间:2023-12-01 19:05:10 26 4
gpt4 key购买 nike

我试图为 java.lang#Object 声明的方法提供默认实现。这是一个MCVE对于我遇到的问题。在接口(interface) IAspect 中我声明了一个 equals 方法。在这个类的实现中,我将其定义为始终为 false。因此理论上该示例的 main 方法应该输出 false,但它输出 true。反编译该类时,该方法不存在。我知道项目设置有效,因为接口(interface) AspectJ 中的其他方法正确生成了所需的代码。是否可以使用注释来做到这一点?我通常使用 AspectJ 语法编写 AspectJ 代码。其按预期工作,没有任何缺陷。但我不确定如果我使用 AspectJ-Syntax,是否能够在单独的库中提取 AspectJ 代码,就像在我的 MCVE 中一样。

所以我的实际问题:

  • 是否可以为从其他类继承的非抽象方法提供默认实现,而不是定义方面的接口(interface)?
  • 是否可以在库中使用 AspectJ-Syntax 并将该库添加为 AspecJ-Dependency,以便我的代码仍然使用外部定义的方面?

根据答案,我将决定如何进一步进展。

最佳答案

就像我的 answer to your previous question 中一样,我再次创建了一个 pull request #2为你。它的作用:

  • 将您的注释样式方面转换为 native 语法方面,内联声明接口(interface)及其方法实现,从而摆脱以前的三个类。在我看来,这是更加优雅和可读的。无论如何,我不喜欢注释式语法,正如您已经发现的那样,后者具有 native 语法所没有的限制。

  • 将两个单独的 Maven 模块重新构建为根/父 POM,用于配置常用的依赖项和插件,然后仅在两个子 POM 中必要时使用其他配置详细信息进行引用和修改。 POM 库现在再次包含 AspectJ Maven 插件,因为由于 native 语法,我们还需要 AJ 编译器用于方面库。当然,您可以在库中使用 native 语法方面,本模块向您展示了如何操作。

  • 另一个好处是,现在您只需在父 POM 上调用 mvn clean package ,库就会在应用程序模块使用之前自动构建和打包。不再需要先在库上使用 mvn clean install 。实际上,构建应用程序根本不需要 install

现在,如果在 mvn clean package 之后从根目录运行应用程序,您将看到以下内容:

$ java -jar example/target/example-1.0.0-SNAPSHOT.one-jar.jar
Test
false
false
hello

这就是你想要的,不是吗?

关于java - AspectJ @DeclareMixin,未由接口(interface)声明的方法不会被编织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59574896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com