使用 java 命令运行 AspectJ Load-Time-Weaving 时出现问题

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

我正在尝试运行和测试 aspectJ 加载时间编织。 它编译成功。

 javac -cp "lib/*" -d classes src/*.java

运行程序时,输出只有

Hello
。可悲的是,方面没有运行。

java -javaagent:lib/aspectjweaver-1.9.19.jar -cp "lib/*:classes/" Runne

这是我的文件夹结构

├── classes
│   ├── HelloWorld.class
│   ├── HelloWorldAspect.class
│   └── Runner.class
├── lib
│   ├── aspectjrt-1.9.19.jar
│   └── aspectjweaver-1.9.19.jar
└── src
    ├── HelloWorld.java
    ├── HelloWorldAspect.java
    └── Runner.java

文件内容为:

public class HelloWorld {
  public void greet() {
    System.out.println("Hello");
  }
}
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.After;

public class HelloWorldAspect {
  @After("execution (* HelloWorld.*(..))")
  public void greetAspect() {
      System.out.println(", World");
  }
}

public class Runner {
  public static void main(String[] args) {
      HelloWorld h = new HelloWorld();
      h.greet();
  }
}

我试过

-Daj.weaving.verbose=true
看看jar是否加载了。

$ java -javaagent:lib/aspectjweaver-1.9.19.jar -cp "lib/*:classes/" -Daj.weaving.verbose=true Runner

[AppClassLoader@18b4aac2] info AspectJ Weaver Version 1.9.19 built on Wednesday Dec 21, 2022 at 06:57:22 PST
[AppClassLoader@18b4aac2] info register classloader sun.misc.Launcher$AppClassLoader@18b4aac2
[AppClassLoader@18b4aac2] info no configuration found. Disabling weaver for class loader sun.misc.Launcher$AppClassLoader@18b4aac2
Hello

我不想运行该工具

ajc
并希望与
java
程序一起运行并运行方面查看输出
Hello, World

java aspectj javac javacompiler
1个回答
0
投票

我还没有尝试编译和运行你的示例代码,但在阅读你的问题时我注意到两件事:

  1. 您的方面类缺少
    @Aspect
    注释。
  2. 您的项目缺少一个 aop.xml 文件,用于指定加载时织入 (LTW) 选项。有关更多信息,请参阅AspectJ LTW 文档

如果这些提示不能帮助您解决问题,请随时对此答案发表评论,但请先尝试并研究文档。

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