我了解到Spring避免使用-javaagent
vm选项来使它的AspectJ加载时间能够正常工作,而是依靠类加载器来启动代理。
我认为Java规范规定使用Java代理的唯一方法是通过-javaagent
vm选项。
我错了吗?有人可以将我定向到可以澄清我的疑问的官方Java规范/文档吗?
我在这篇有趣的博客文章中找到了有关加载Java代理的一些信息。
工具代理要启用JVM工具,您必须提供一个(或多个)作为JAR文件部署的代理。JAR文件清单中的属性指定将被加载以启动代理的代理类。
有两种加载代理的方式:
- 使用命令行界面:通过将此选项添加到命令行:-javaagent:jarpath [= options],其中jarpath是代理JAR文件的路径。options是代理选项。在同一命令行上可以多次使用此开关,从而创建多个代理。一个以上的代理可以使用相同的jarpath。
- 通过动态加载:JVM必须实现一种机制,以在VM启动后的某个时间启动代理。这样,工具可以将代理“附加”到正在运行的JVM(例如,探查器或ByteMan)
JVM初始化后,代理类将由系统类加载器加载。如果类加载器无法加载代理,则JVM将中止。...
是的,我们将非常欢迎官方文档/规范...
编辑1:最后,我遇到了一些相关的官方文档:用于动态加载代理的API Javadoc,如上面的第二个要点所述:有关VirtualMachine类的信息,请参见此处;有关LoadAgent方法的信息,请参见此处。
编辑2:另请参阅其他博客文章。它清楚地说明了在启动时静态加载javaagent和在运行时动态加载javaagent之间的区别。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句