文档章节

java ASM 分析类

y
 yan5845hao
发布于 2017/05/15 14:59
字数 329
阅读 7
收藏 0

实现ClassVisitor接口

package com.uwo.resources.asm.test;

import org.objectweb.asm.*;

/**
 * Created by yanhao on 2017/5/15.
 */
public class UwoClassVisitor implements ClassVisitor{

    public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
        System.out.println("visit");
    }

    public void visitOuterClass(String owner, String name, String desc) {
        System.out.println("visitOuterClass");
    }

    public void visitInnerClass(String name, String outerName, String innerName, int access) {
        System.out.println("visitInnerClass");
    }

    public void visitAttribute(Attribute attr) {
        System.out.println("visitAttribute");
    }

    public void visitSource(String source, String debug) {
        System.out.println("visitSource");
    }

    public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
        System.out.println("Annotation===========start==========");
        System.out.println("Annotation desc = " + desc);
        System.out.println("Annotation visible = " + visible);
        System.out.println("Annotation===========end==========");
        return null;
    }

    public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
        System.out.println("Field===========start==========");
        System.out.println("Field access = " + access);
        System.out.println("Field name = " + name);
        System.out.println("Field desc = " + desc);
        System.out.println("Field signature = " + signature);
        System.out.println("Field value = " + value);
        System.out.println("Field===========end==========");
        return null;
    }

    public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
        System.out.println("Method===========start==========");
        System.out.println("Method access = " + access);
        System.out.println("Method name = " + name);
        System.out.println("Method desc = " + desc);
        System.out.println("Method signature = " + signature);
        System.out.println("Method exceptions = " + exceptions);
        System.out.println("Method===========end==========");
        return null;
    }

    public void visitEnd() {
        System.out.println("visitEnd");
    }
}

执行代码

try {
    ClassReader cr = new ClassReader(Uwo.class.getName());
    cr.accept(new UwoClassVisitor(), 0);
} catch (IOException e) {
    e.printStackTrace();
}

执行结果

visit
visitSource
Field===========start==========
Field access = 4
Field name = name
Field desc = Ljava/lang/String;
Field signature = null
Field value = null
Field===========end==========
Field===========start==========
Field access = 4
Field name = sex
Field desc = Ljava/lang/Integer;
Field signature = null
Field value = null
Field===========end==========
Method===========start==========
Method access = 1
Method name = <init>
Method desc = (Ljava/lang/String;)V
Method signature = null
Method exceptions = null
Method===========end==========
Method===========start==========
Method access = 1
Method name = hello
Method desc = (Ljava/lang/String;)Ljava/lang/String;
Method signature = null
Method exceptions = null
Method===========end==========
Method===========start==========
Method access = 1
Method name = run
Method desc = ()V
Method signature = null
Method exceptions = null
Method===========end==========
visitEnd

© 著作权归作者所有

共有 人打赏支持
y
粉丝 7
博文 124
码字总数 22079
作品 0
扬州
程序员
私信 提问
Java 字节码工具 ASM 在 web services 开发中的应用

在基于 JAX-WS 标准的 web services 的开发中,不少实际场景都是希望采用自底向上的开发方式, 即基于已有的 Java bean 来创建 web services 。WebSphere Application Server ( 以下简称 WA...

IBMdW
2011/09/26
2K
2
关于java字节码框架ASM的学习

一、什么是ASM   ASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Jav...

変態L
2014/01/14
0
1
[ASM]两个比较有用的ASM工具类

org.objectweb.asm.util.ASMifierClassVisitor:分析类,并生成asm生成该类的代码, 如果自己不想了解具体的asm指令,这个类最有帮助 java -classpath asm-3.3.1.jar;asm-util-3.2.jar org.o...

eonezhang
2013/04/16
0
0
关于java字节码框架ASM的学习

一、什么是ASM   http://bbs.itheima.com/thread-23776-1-1.html?fstgj 以前的学习网站,-全套java视频教程,需要的自己看下,可以去这个网站下载,下载视频免费,不需要注册和做什么任务 ...

夜默
2013/06/18
0
4
动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

在运行时期可以按照Java虚拟机规范对class文件的组织规则生成对应的二进制字节码。当前有很多开源框架可以完成这些功能,如ASM,Javassist。 动态代理机制详解(JDK 和CGLIB,Javassist,ASM...

素雷
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

http协议请求头的意义

GET /day31_Http_306/index.jsp HTTP/1.1: GET请求,请求服务器路径为/hello/index.jsp,协议为1.1 请求头 1.Host:localhost:请求的主机名为localhost2.User-Agent:Mozilla/5.0(Windows NT......

潇潇程序缘
21分钟前
4
0
Netty 简单服务器 (三)

经过对Netty的基础认识,设计模型的初步了解,来写个测试,试试手感 上篇也说到官方推荐我们使用主从线程池模型,那就选择这个模型进行操作 需要操作的步骤: 需要构建两个主从线程组 写一个服务器...

_大侠__
32分钟前
5
0
day02:管道符、shell及环境变量

1、管道符:"|" 用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等) [root@localho...

芬野de博客
42分钟前
11
0
Kubernetes系列——Kubernetes 组件、对象(二)

一、Kubernetes 组件 介绍了Kubernetes集群所需的各种二进制组件。 Master 组件 Master组件提供集群的管理控制中心。Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一...

吴伟祥
52分钟前
15
0
Flink-数据流编程模型

1、抽象等级 Flink提供了不同级别的抽象来开发流/批处理应用程序。 1) 低层级的抽象 最低层次的抽象仅仅提供有状态流。它通过Process函数嵌入到DataStream API中。它允许用户自由地处理来自一...

liwei2000
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部