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

问题描述 投票:0回答:1

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

所以我的实际问题是:

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

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

java maven aop aspectj aspectj-maven-plugin
1个回答
0
投票

就像在我的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

这是您想要的,不是吗?

© www.soinside.com 2019 - 2024. All rights reserved.