返回顶部
首页 > 资讯 > 后端开发 > Python >Java Agents代理是什么
  • 264
分享到

Java Agents代理是什么

2024-04-02 19:04:59 264人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、Java Agents 和 Instrumentation二、Java agent的使用三、如何编写Java代理四、代理类五、部署Java Agents表示Java Agen

表示Java Agents的类显然只不过是Java api库中的任何其他类。但是,让它们与众不同的是,它们遵循某种约定,这种约定使Java代码能够拦截JVM中运行的另一个应用程序。其目的只是让代理调查或修改字节码。这是一个强大但不可思议的特性,超出了Java程序通常的功能范围。在某种程度上,它可以闯入一个程序,修改字节码或造成混乱。请理解,这不是添加到Java中的新技术或功能。自jdk1.5以来,它一直是库的一部分。这意味着使用它们也有一些真正的好处。但是,在讨论它们的优点以及如何使用它们之前,让我们先看看在Java中哪里可以找到它们。

一、Java Agents 和 Instrumentation

Java agentJava Instrumentation API的一部分。检测API提供了一种修改方法字节码的机制。这可以静态和动态地完成。这意味着我们可以通过向程序中添加代码来更改程序,而不必涉及程序的实际源代码。结果可能会对应用程序的整体行为产生重大影响。

Java agentinstrumentation API位于名为 Java.lang.intrumentation 的包中。

二、Java agent的使用

Java agent可以有多种用途,如面向方面编程aop)、变异测试、评测等。AOP通常会在不更改代码的情况下向现有程序添加日志记录或安全性等行为。它使用Java代理来操作字节码,并将其功能与程序结合起来。监视JVM级别的参数,如对象创建、垃圾收集、线程执行等,是探查器的工作。评测工具显著地使用Java代理评测执行中程序的JVM参数。

还有许多其他情况下,Java agentinstrumentation API非常方便。

三、如何编写Java代理

实现Java agent的类必须实现一个名为


public static void premain(String agentArgs, Instrumentation inst)


此方法构成代理的入口点,就像常规Java程序的入口点是主方法一样。

JVM初始化后,调用 premain 方法;这表示代理。可以有几个这样的代理;因此,将根据JVM初始化期间指定的代理的顺序调用每个 premain 方法。如果找不到特定的 premain 方法,JVM会依次调用 premain 方法的重载版本,例如


public static void premain(String agentArgs)


代理类还可能包含JVM在agent启动后通常使用的方法,例如


public static void agentmain(String agentArgs,
   instrumentation inst)


或者,它的重载版本


public static void agentmain(String agentArgs)


这是JVM的典型例程,一旦该例程完成,就会调用 main 方法。

另一件重要的事情是,Java代理在开发期间必须在资源目录的 META-INF 文件夹中包含 MANIFEST.MF 文件。此文件包含有关包分发的元数据信息。此文件作为其jar打包的一部分包含。 MANIFEST.MF 文件中包含的属性提供了有关为什么需要这样做的线索。这些属性如下所示:

  • Premain-class :此属性定义代理类。如果未定义此属性,JVM将中止。
  • Agent-class :它定义了在JVM启动后启动Java代理的机制。如果此属性未定义,代理将不会启动。
  • Can-Redefine-Classes :这定义了代理重新定义类的能力。该值可以是truefalse
  • Can-RetransfORM-Classes :这定义了代理重新传输类的能力。该值可以是truefalse
  • Can-Set-Native-Method-Prefix :这定义了代理设置本机方法前缀的能力。该值可以是truefalse
  • Boot-Class-Path :定义引导类加载程序的搜索路径列表。

一个简单的例子:

探查器工具通常通过从JVM提取信息来报告运行时Java对象的不同参数。这些参数包括关于使用检测框架的对象的内存使用等信息。

1. 这里我们使用 premain 方法创建一个代理类。

2. 传递给 premain 方法的检测实例将提供有关对象大小的信息。

3. 将代理类与 MANIFEST.MF 文件一起打包到JAR文件中。

4. 使用命令行参数将代理传递给JVM。

这是我们将在示例中使用的示例类。这没什么特别的。


package com.mano.examples;
public class Main {
   public static void greet(String msg){
      System.out.println(msg);
   }
   public static void main(String[] args){
      greet("Hello Agents");
   }
}

四、代理类

带有 premain 方法的instrumentation agent类用于检索我们需要的信息。插装接口的实现被传递给 premain 方法。我们使用由instrumentation接口定义的 getObjectSize 方法来获取运行时主对象的内存使用情况。


package com.mano.examples;
import java.lang.instrument.Instrumentation;
public class MyAgentClass {
   public static void premain(String agentArgs,
      Instrumentation inst) {
      System.out.println(inst.getObjectSize
         (new Main()))
   }
}

之后,我们必须创建 MANIFEST.MF 文件。这只是一个文本文件,我们在其中放置与代理类相关的信息。JVM将使用它来加载代理。该文件通常存储在 META-INF 目录中。

我们的示例所需的内容非常基本:


Manifest-Version: 1.0
Premain-Class: com.mano.examples.MyAgentClass

现在,编译所有Java文件以创建类文件。最后,创建JAR文件,如下所示:


jar -cmf META-INF/MANIFEST.MF myagent.jar com/mano/examples/
   MyAgentClass.class

五、部署Java Agents

创建代理后,它将作为JAR文件部署。清单文件中的属性指定将加载以启动代理的代理类。请注意,启动代理有很多方法:使用命令行、运行时或作为JAR可执行文件。我们将在这里使用命令行。

使用命令行运行Agents代理

命令行是:


java -javaagent:myagent.jar -cp . com.mano.examples.Main

这表示 premain 方法将在应用程序执行之前运行,并创建 Main 实例的大小。

结论:

仪器API所提供的功能可以进行多种创新。AOP是一个简单的例子。虽然Java代理和Java Instrumentation API在应用程序开发中不经常使用,但是关于它的全部内容的想法可以澄清Java的许多其他方面。这里给出的代码示例是初步的,只是为了说明如何创建代理。

到此这篇关于Java Agents代理是什么的文章就介绍到这了,更多相关Java Agents代理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java Agents代理是什么

本文链接: https://lsjlt.com/news/136285.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java Agents代理是什么
    目录一、Java Agents 和 Instrumentation二、Java agent的使用三、如何编写Java代理四、代理类五、部署Java Agents表示Java Agen...
    99+
    2024-04-02
  • java什么是代理?
    java什么是代理?代理是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。可以不修改目标对象,对目标对象功能进行拓展。代理的作用:降低代码的冗余。代理模式的实现分为两大类:静态实现和动态实现,动态实现根据实现的方式...
    99+
    2018-02-20
    java教程 java 代理
  • java中代理是什么
    java中代理即Proxy Pattern,23种java常用设计模式之一。代理模式的定义:对其他对象提供一种代理以控制对这个对象的访问。代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直...
    99+
    2017-11-12
    java入门 java
  • Java代理模式是什么
    本篇内容介绍了“Java代理模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java 代理模式什么是代理代理是一种设计模式,它的核心...
    99+
    2023-06-19
  • java动态代理的原理是什么
    小编给大家分享一下java动态代理的原理是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、说明使用代理将对象包装起来,然后用该代理对象取代原始对象。任何对原...
    99+
    2023-06-15
  • Java动态代理机制是什么
    这篇文章主要讲解了“Java动态代理机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java动态代理机制是什么”吧!Java动态代理机制的出现,使得Java开发人员不用手工编写代理类...
    99+
    2023-06-17
  • java代理模式是什么意思
    本篇内容介绍了“java代理模式是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录什么是代理举个栗子什么是代理模式实现代理的方式静...
    99+
    2023-06-20
  • Java动态代理是什么意思
    这篇文章主要讲解了“Java动态代理是什么意思”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java动态代理是什么意思”吧!动态代理分两部分,动态和代理,我们先说下代理模式1、代理模式代理模...
    99+
    2023-06-20
  • Java中的动态代理是什么
    本篇内容介绍了“Java中的动态代理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!十分钟理解 Java 中的动态代理一、概述 什么是代...
    99+
    2023-06-02
  • java是代表什么?
    Java是一种高级的面向对象,基于类,并发,安全和通用的计算机编程语言。它是一种广泛使用的强大技术。Java是一门面向对象编程语言,是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应...
    99+
    2022-01-26
    java教程 java
  • java中Cglib代理的用法是什么
    本篇内容介绍了“java中Cglib代理的用法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明Cglib代理可以称为子类代理,是在内...
    99+
    2023-06-20
  • java中JDK动态代理的原理是什么
    这篇文章将为大家详细讲解有关java中JDK动态代理的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java可以用来干什么Java主要应用于:1. web开发;2. Android...
    99+
    2023-06-14
  • java动态代理实现的原理是什么
    Java动态代理是指在运行时动态生成代理类的技术。它的实现原理主要涉及两个关键组件:接口和InvocationHandler。1. ...
    99+
    2023-09-09
    java
  • java中动态代理的特点是什么
    java中动态代理的特点是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。说明JDK动态代理不需要实现界面,只有目标对象需要实现界面。基于接口的动态代理需要使用JDK中的AP...
    99+
    2023-06-20
  • java迭代器实现的原理是什么
    Java迭代器的实现原理是基于设计模式中的迭代器模式。迭代器模式是一种行为型模式,它提供了一种方法来顺序访问一个聚合对象中的元素,而...
    99+
    2023-10-10
    java
  • java代理模式的优缺点是什么
    优点:1. 隐藏实现细节:代理模式可以隐藏实现对象的细节,客户端只需要与代理对象交互即可,无需了解实现细节。2. 增强安全性:代理模...
    99+
    2023-05-13
    java代理模式 java
  • Java中动态代理机制的原理是什么
    今天就跟大家聊聊有关Java中动态代理机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java 动态代理机制的出现,使得 Java  开发人员不用手工编写代理...
    99+
    2023-06-17
  • java源代码是什么
    Java源代码是使用Java编程语言编写的程序代码。它包含一系列的语句、表达式、变量、函数等,用于描述程序的逻辑和行为。Java源代...
    99+
    2023-08-22
    Java
  • HTTP代理是什么
    这篇文章将为大家详细讲解有关HTTP代理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、概念HTTP协议即超文本传输协议,是Internet上进行信息传输时使用最为广泛的一种非常简单...
    99+
    2023-06-14
  • 什么是代理IP
    本篇内容介绍了“什么是代理IP”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!随着互联网的普及和快速发展,人们越来越依赖互联网。相应的网络安全...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作