如何使用命令行将切入点附加到 .jar 文件中的类方法?
Posted
技术标签:
【中文标题】如何使用命令行将切入点附加到 .jar 文件中的类方法?【英文标题】:How to attach a pointcut to a to a method of class residing inside a .jar file using command line? 【发布时间】:2014-03-10 11:31:04 【问题描述】:我是 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 文件中引用类中的方法。
【问题讨论】:
我不知道 aspectJ,但我担心您可以在类路径中添加 .jar 并简单地导入该类 @Youngistan 你能告诉我一个声明,通过它我可以在那个 .jar 中导入一个 cals。正如你所说,我在环境变量的类路径中添加了这个 jar 的路径。 sachin 你是否使用任何 IDE 如果是,那么只需转到项目的属性并添加外部 jar 没有我没有使用任何 ide 我通过 cmd 行和记事本做的事情。 【参考方案1】:经过 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 放在我的类路径中,现在我可以在任何类中使用它了。
希望它对像我这样的其他人有用。
【讨论】:
以上是关于如何使用命令行将切入点附加到 .jar 文件中的类方法?的主要内容,如果未能解决你的问题,请参考以下文章