当前位置:首页 > 编程教程 > java技术文章 > java agent用法实例

java agent用法及实例代码

  • 发布时间:
  • 作者:码农之家
  • 点击:132

这篇文章主要知识点是关于java、agent、用法、实例、代码、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Java核心技术卷II:高级特性
  • 类型:Java大小:195.7 MB格式:PDF作者:霍斯特曼
立即下载
Java开发实例大全(提高卷)
  • 类型:Java编程大小:162.8 MB格式:PDF作者:软件开发技术联盟
立即下载

java agent用法实例

java agent的作用

在字节码这个层面对类和方法进行修改的技术,能够在不影响编译的情况下,修改字节码。可以理解spring的aop技术

如何实现

1.实现javaagent需要实现premain方法
2.必须在MANIFEST.MF文件中有Premain-Class

demo实现

agent
 package com.xueyou.demo.agent;
  import javassist.ClassPool;
  import javassist.CtClass;
  import javassist.CtMethod;
  import javassist.CtNewMethod;
  import java.lang.instrument.ClassFileTransformer;
  import java.lang.instrument.IllegalClassFormatException;
  import java.security.ProtectionDomain;
  public class FirstAgent implements ClassFileTransformer {
    public final String injectedClassName = "com.xueyou.agentdemo.App";
    public final String methodName = "hello";
    public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
      className = className.replace("/", ".");
  //    System.out.println(className);
      if (className.equals(injectedClassName)) {
        CtClass ctclass = null;
        try {
          ctclass = ClassPool.getDefault().get(className);// 使用全称,用于取得字节码类<使用javassist>
          CtMethod ctmethod = ctclass.getDeclaredMethod(methodName);// 得到这方法实例
          ctmethod.insertBefore("System.out.println(11111111);");
          return ctclass.toBytecode();
        } catch (Exception e) {
          System.out.println(e.getMessage());
          e.printStackTrace();
        }
      }
      return null;
    }
  }

预加载类

package com.xueyou.demo;
import com.xueyou.demo.agent.FirstAgent;
import java.lang.instrument.Instrumentation;
/**
 * Hello world!
 */
public class App {
  public static void premain(String agentOps, Instrumentation inst) {
    System.out.println("=========premain方法执行========");
    System.out.println(agentOps);
    // 添加Transformer
    inst.addTransformer(new FirstAgent());
  }
}

maven指定预加载类

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>utf-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer
                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <manifestEntries>
                    <PremainClass>com.xueyou.demo.App</Premain-Class>
                  </manifestEntries>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

如何使用

这里有两种方式指定javaagent:

1)使用命令行:java -javaagent:XXX.jar ddd.jar
2)使用idea的vm option选项。

java agent 使用及实现代码

总结

以上所述是小编给大家介绍的java agent 使用及实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持!

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

您可能感兴趣的文章:

  • Java面向对象编程中类的继承用法总结
  • 本文实例讲述了Java面向对象编程之类的继承。分享给大家供大家参考,具体如下: 继承: 特殊类拥有一般类的全部属性与行为。 继承好处: 1.提高了代码的复用性 2.让类与类之前产生了关系,有了这个关系才有多态的特性。继承是类和类之前的关系。 注意事项: 1.java只支持单继承,不支持多继承。因为多继承有安全隐患:当多个父类定义相同的函数,但是功能不同时,子类不……

  • java中的移动位运算:,>>>用法整理
  • 1. 概念 左移运算符,左移是在后面补0, num 1,相当于num乘以2 右移运算符, 右移是在前面补1或0,num 1, 相当于num除以2 无符号右移,是在前面补0, 忽略符号位,空位都以0补齐 另外, 不论是左右还是右移32位,相当于不移动,还是原值。 实际上 在java虚拟机执行这句代码的时候如下这样执行的: 5(n%32)---结果 你这里n=32 ;所以532即是 5(32%32)--50 的结果; 2. 测试代码 public class Test{ ……

  • java中Class.getMethods()和Class.getDeclaredMethods()用法区别
  • 在java中,可以根据Class类的对象,知道某个类(接口)的一些属性(成员 ,方法,注释,注解)等。由于最近的工作中用到了这些,其中需要在代码中格局反射知道某些类的方法,查看文档的时候,看到了getMethods()和getDeclaredMethods()的差异。虽然两者都能实现目的,但个人觉得还是有必要区分下。 JDK API(1.6)文档中是这样翻译两个方法的: getMethods(): 返回一个包含某些 Method……

  • Java内部类原理及用法详解
  • 本文实例讲述了Java内部类原理与用法。分享给大家供大家参考,具体如下: 一、非静态内部类 public class OutClass { private String name = outclass; public void show() { System.out.println(this.name); } public void innerShow() { InnerClass inner = new InnerClass(); inner.show(); inner.outShow(); } // 非静态内部类 class InnerClass { // 2.0非静态内部类不能有静态变量的声明 // public static int age=0; private String name = innerclass; public voi……

  • Java HashMap用法及知识点总结
  • 304 Java源码解析HashMap简介 本文基于jdk1.8进行分析 HashMap是java开发中可以说必然会用到的一个集合。本文就HashMap的源码实现进行分析。 首先看一下源码中类的javadoc注释对HashMap的解释。如下图。HashMap是对Map接口的基于hash表的实现。这个实现提供了map的所有可选操作,并且允许null值(可以多个)和一个null的key(仅限一个)。HashMap和HashTable十分相似,除了HashMap是非同步的且允许……

  • Java中链表、栈、队列、树的数据结构用法实例总结
  • 本文实例讲述了Java数据结构之链表、栈、队列、树的实现方法。分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查。 一、线性表(链表) 1、节点定义 /**链表节点定义 * @author colonel * */class Node { public int data; Node next=null; public Node(int data){ this.data=data; }} 2、链表操作类 /**链表操作类 * @author colonel * */public class ……

    相关电子书
    学习笔记
    网友NO.351184

    Java中File文件操作类的基础用法

    前言 众所周知Java提供File类,让我们对文件进行操作,下面就来简单整理了一下File类的用法。 话不多说了,来一起看看详细的介绍吧 1.基本概念 File:文件和目录路径名的抽象表示形式,代表文件或者文件夹。 2.构造方法 // 根据parent抽象路径名和child路径名字符串创建一个新File实例 File(File parent, String child) // 通过将给定路径名字符串转换为抽象路径名来创建一个新File实例 File(String pathname) // 根据parent路径名字符串和child路径名字符串创建一个新File实例 File(String parent, String child) // 通过将给定的file:URI转换为一个抽象路径名来创建一个新的File实例 File(URI uri) 3.常用方法 (1).创建功能 // 创建此抽象路径名指定的目录 boolean mkdir() // 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录 boolean mkdirs() // 当且仅当不存在具有此抽象路径名指定名称的文……

    网友NO.402131

    Java函数习惯用法详解

    在Java编程中,有些知识 并不能仅通过语言规范或者标准API文档就能学到的。在本文中,我会尽量收集一些最常用的习惯用法,特别是很难猜到的用法。 我把本文的所有代码都放在公共场所里。你可以根据自己的喜好去复制和修改任意的代码片段,不需要任何的凭证。 实现equals() class Person { String name; int birthYear; byte[] raw; public boolean equals(Object obj) { if (!obj instanceof Person) return false; Person other = (Person)obj; return name.equals(other.name) birthYear == other.birthYear Arrays.equals(raw, other.raw); } public int hashCode() { ... }} 参数必须是Object类型,不能是外围类。 foo.equals(null) 必须返回false,不能抛NullPointerException。(注意,null instanceof 任意类 总是返回false,因此上面的代码可以运行。) 基本类型域(比如,int)的比较使用 == ,基本类型数组域的比较使用Arrays.equals()。 覆盖equals()时,……

    网友NO.469388

    Java锁机制Lock用法示例

    本文实例讲述了Java锁机制Lock用法。分享给大家供大家参考,具体如下: package com.expgiga.JUC;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 一、用于解决多线程安全问题的方式: * 1.同步代码块 synchronized 隐式锁 * 2.同步方法 synchronized 隐式锁 * 3.同步锁Lock (jdk1.5以后) 显示锁 * 注意:显示锁,需要通过lock()方式上锁,必须通过unlock()方式进行释放锁 */public class TestLock { public static void main(String[] args) { Ticket ticket = new Ticket(); new Thread(ticket, "1号窗口").start(); new Thread(ticket, "2号窗口").start(); new Thread(ticket, "3号窗口").start(); }}class Ticket implements Runnable { private int tick = 100; private Lock lock = new ReentrantLock(); @Override public void run() { while (true) { lock.lock(); try { if (tick 0) { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread……

    网友NO.419517

    JAVA Optional类用法分享

    Optional在JAVA中被定义为一个容器类,更确切的说只存一个元素的容器。 container object which may or may not contain a non-null value. Optional类结构 Optional属性 Optional类中包含两个属性: 类属性:EMPTY 对象属性:value EMPTY属性用来存放一个value为null的Optional对象。 value属性用来存放非null对象。 Optional方法 Optional的有两个构造方法,都被private修饰。 private Optional() { this.value = null;}private Optional(T value) { this.value = Objects.requireNonNull(value);} 无参构造方法用来初始化EMPTY。有参构造方法用来初始化非null对象。 因为构造方法被修饰为私有的,Optional想要实例化对象只能通过类方法调用。Optional提供三个类方法。 empty:返回value为null的Optional对象 of:返回value非null的Optional对象 ofNullable:value的值根据参数是否为null返回对应的Optional对象 public staticT OptionalT empty() { OptionalT t = (Optiona……

    <
    1
    >

    Copyright 2018-2020 xz577.com 码农之家

    本站所有电子书资源不再提供下载地址,只分享来路

    版权投诉 / 书籍推广 / 赞助:QQ:520161757