我是 AOP 新手。我在 HookShow.java 文件中创建了一个类:
public class HookShow
{
void show(String msg)
{
System.out.println("In show :"+msg);
}
public static void main(String[] args)
{
HookShow cm=new HookShow();
cm.show("called from main method");
}
}
然后我编译它并使用以下方法将生成的 .class 文件添加到 .jar 文件中:
jar cf HSHOW.jar HookShow.class
现在我有了一个 HSHOW.jar。现在我正在创建一个切面,该切面在调用 show()
时执行。但我不知道如何引用该 jar 文件中的类和方法。
以下是我的方面文件:
public aspect AspectHookShow
{
pointcut changemsgPointcut( String str) :execution(void HookShow.show(String)) && args(str);
before(String str ) : changemsgPointcut( str)
{
System.out.println("inside pointcut :"+str);
}
}
所以请有人告诉我如何引用我的 jar 文件中类内的方法。
最佳答案
经过 3 个小时的研究,我找到了 3 种方法来实现上述目标,好处是我不必对代码进行太多更改,我只需要在 cmd 提示符下执行一些命令即可:
第一种方法:
我从 Oreilly AspectJ Cookbook 中得到了一种方法:
步骤: 1:使用传统的javac命令编译HookShow类:
javac HookShow.java
2:将生成的HookShow.class文件打包成名为MyApp.jar的.jar文件:
jar -cvf MyApp.jar HookShow.class
3:使用ajc命令编译AspectHookShow.java切面,在命令行上使用-inpath选项指定新的MyApp.jar:
> ajc -inpath MyApp.jar AspectHookShow.java
-inpath 选项强制 ajc 编译器将 Java 字节代码从提供的 .jar 文件提取到 -d 选项指定的目标目录中。然后,ajc 编译器将提取的字节代码包含在方面编织过程中。
4:如果在使用 ajc 编译期间没有出现错误,那么您将成功地将 MyApp.jar 文件中包含的类与 AspectHookShow 方面编织在一起。由于 ajc 命令从提供给 -inpath 选项的 .jar 文件中提取类,因此运行应用程序不再需要它们。但是,您可以选择在运行 ajc 命令时使用 -outjar 选项将新应用程序重新打包到自己的 .jar 文件中:
> ajc -inpath MyApp.jar -outjar MyAspectOrientedApp.jar AspectHookShow.java
这会生成一个 MyAspectOrientedApp.jar,其中包含应用程序的方面和类,然后可以使用传统的 java 命令运行它们:
> java -classpath MyAspectOrientedApp.jar HookSHow
第二种方式:
执行以下命令:
>ajc -janars aspectjrt.jar ;HSHOW.jar AspectHookShow.java -outjar Final.jar
这将创建 Final.jar。然后我把这个 jar 放在我的类路径中,现在我可以在任何类中使用它。
希望它对像我这样的人有用。
关于java - 如何使用命令行将切入点附加到驻留在 .jar 文件内的类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22298945/