Java代理教程

57

我想了解一些关于Java代理的知识,但研究并不容易。大部分结果都涉及到JADE。我知道Java代理可能有两个意思:

  1. 在Java中编程的代理是分布式系统代理概念的一个体现。
  2. 用于增强JVM工作的低级软件组件,例如分析器、覆盖率工具等。

我在这里找到了类似的问题但不幸的是它也只提到了版本1。

你知道有关Java代理版本2的任何文章、入门教程或示例项目吗?我在这里找到了一个但我正在寻找更多相关资料。


1
https://dev59.com/XHM_5IYBdhLWcg3wrFIt 也有一些有用的链接。 - Vadzim
2个回答

88
第二个案例涉及Java Instrumentation API - 此链接指向相当描述性的Javadoc。
这里是完整的说明和一个如何创建Java Instrumentation代理的示例
主要概念是:
  1. Implement a static premain (as an analogy to main) method, like this:

    import java.lang.instrument.Instrumentation;
    
    class Example {
        public static void premain(String args, Instrumentation inst) {
            ...
        }
    }
    
  2. Create a manifest file (say, manifest.txt) marking this class for pre-main execution. Its contents are:

    Premain-Class: Example
    
  3. Compile the class and package this class into a JAR archive:

    javac Example.java
    jar cmf manifest.txt yourAwesomeAgent.jar *.class
    
  4. Execute your JVM with -javaagent parameter, like this:

    java -javaagent:yourAwesomeAgent.jar -jar yourApp.jar
    

19
-javaagent 参数必须在 -jar 参数之前设置,这一点非常重要。 - berezovskyi
1
我不得不在我的清单中添加一个额外的条目,以便使用Javassist使其正常工作。您可以在我的回答中查看此问题:https://dev59.com/KmPVa4cB1Zd3GeqP5WUD - 11101101b
2
我最近按照以下步骤构建代理。在创建jar文件时,我一直遇到问题,直到我发现命令应该先列出目标.jar文件,然后是清单文件。 - end-user
你可能还需要在Example类中提供一个空的main方法,否则可能会抛出关于缺少主要方法的错误。 - Searene
请确保在manifest.txt文件的结尾处空一行。 - villanueva.ricardo

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接