AspectJ @DeclareMixin,未编织未由接口声明的方法

我正在尝试为java.lang#Object声明的Methods提供默认实现。 这是我遇到的问题的MCVE。 在接口IAspect中,我声明了equals方法。 在此类的实现中,我将其始终定义为false。 因此,从理论上讲,示例的主要方法应输出false,但输出true。 当反编译类时,所述方法不存在。 我知道项目设置可以正常进行,因为AspectJ接口中的其他方法可以正确生成所需的代码。 甚至可以通过注释来做到这一点吗?我通常用AspectJ语法编写我的AspectJ代码。 它按预期工作,没有缺陷。但是我不确定如果使用AspectJ语法,是否能够像我的MCVE一样在单独的库中提取AspectJ代码。

所以我的实际问题是

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

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

changsheng2 回答:AspectJ @DeclareMixin,未编织未由接口声明的方法

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

  • 将注释样式方面转换为一种本机语法,内联声明接口及其方法实现,从而摆脱了之前的三个类。这是更优雅和可读的IMO。我还是不喜欢注释样式的语法,而且正如您已经发现的那样,后者具有本机语法所没有的局限性。

  • 将两个单独的Maven模块重构为一个根/父POM,用于配置常用的依赖项和插件,然后在两个子POM中仅在必要时引用和修改其他配置详细信息。库POM现在又在其中添加了AspectJ Maven插件,因为由于本机语法,我们也需要AJ编译器用于方面库。当然,您可以在库中使用本机语法方面,并且此模块向您展示如何。

  • 另一个好处是,现在您可以仅在父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

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

本文链接:https://www.f2er.com/2826343.html

大家都在问