Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AspectJ@DeclareMixin,未由接口声明的方法不会被编织_Java_Maven_Aop_Aspectj_Aspectj Maven Plugin - Fatal编程技术网

Java AspectJ@DeclareMixin,未由接口声明的方法不会被编织

Java AspectJ@DeclareMixin,未由接口声明的方法不会被编织,java,maven,aop,aspectj,aspectj-maven-plugin,Java,Maven,Aop,Aspectj,Aspectj Maven Plugin,我试图为java.lang#Object声明的方法提供一个默认实现。 以下是我遇到的问题的解决方案。 在接口IAspect中,我声明了一个equals方法。 在这个类的实现中,我将它定义为总是false。 因此,理论上,示例的主要方法应该输出false,但它输出true。 反编译类时,所述方法不存在。 我知道项目设置是有效的,因为接口AspectJ中的另一个方法正确地生成了所需的代码。 甚至可以用注释来实现这一点吗?我通常使用AspectJ语法编写AspectJ代码。 它按预期工作,没有瑕疵。但

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

所以我的实际问题是:

  • 是否可以为继承自其他类而不是定义方面的接口的非抽象方法提供默认实现
  • 是否可以在库中使用AspectJ语法并将此库添加为AspecJ依赖项,以便我的代码仍然使用外部定义的方面
根据答案,我将决定如何进一步改进。

就像在我的文章中一样,我再次为您创建了一个。它的作用是:

  • 将注释样式方面转换为本机语法方面,将接口及其方法实现内联声明,从而去掉以前的三个类。我不喜欢注释风格的语法,正如您已经发现的,后者有本机语法所没有的限制

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

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

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

$java-jar示例/target/example-1.0.0-SNAPSHOT.one-jar.jar
试验
假的
假的
你好
这就是你想要的,不是吗