Java 如何使用命令行将切入点附加到驻留在.jar文件中的类的方法?

Java 如何使用命令行将切入点附加到驻留在.jar文件中的类的方法?,java,jar,aspectj,aspect,Java,Jar,Aspectj,Aspect,我是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 HookSho

我是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食谱中找到了一种方法:

步骤: 1:使用传统的javac命令编译HookShow类:

javac HookShow.java
> ajc  -inpath MyApp.jar -outjar MyAspectOrientedApp.jar AspectHookShow.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编译器从提供的.jar文件中将Java字节码提取到目标目录中,如-d选项所指定。ajc编译器然后在方面编织过程中包含提取的字节码

4:如果在使用ajc编译过程中没有发生错误,那么您将成功地将MyApp.jar文件中包含的类与AspectHookShow方面编织在一起。因为ajc命令从提供给-inpath选项的.jar文件中提取类,所以运行应用程序不再需要这些类。但是,在运行ajc命令时,您可以选择使用-outjar选项将新应用程序重新打包到自己的.jar文件中:

javac HookShow.java
> 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放在我的类路径中,现在我可以在任何类中使用它了


希望它对像我这样的人有用。

我不知道aspectJ,但我担心您可以在类路径中添加.jar并简单地导入它class@Youngistan你能告诉我一个语句,通过它我可以在.jar中导入一个cals吗。正如你说的,我在我的classpath in环境变量中添加了这个jar的路径。sachin你是否使用任何IDE?如果是,那么只需转到项目的属性并添加外部jarno,我不使用任何IDE,我通过cmd行和记事本进行操作。