博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASM4 读取java类注解
阅读量:7238 次
发布时间:2019-06-29

本文共 2764 字,大约阅读时间需要 9 分钟。

package hello.asm.my;import hello.asm.bean.User;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.sql.Connection;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import org.objectweb.asm.AnnotationVisitor;import org.objectweb.asm.Attribute;import org.objectweb.asm.ClassReader;import org.objectweb.asm.ClassVisitor;import org.objectweb.asm.ClassWriter;import org.objectweb.asm.FieldVisitor;import org.objectweb.asm.MethodVisitor;import org.objectweb.asm.Opcodes;import org.objectweb.asm.Type;import org.objectweb.asm.tree.AnnotationNode;import org.objectweb.asm.tree.ClassNode;public class Hello extends ClassLoader implements Opcodes{	public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, IOException {	    String n = User.class.getName();	    ClassReader cr = new ClassReader(n);	    final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);	    	    ClassNode cn =  new ClassNode();	    cr.accept(cn, ASM4);	    final List
nlist = cn.visibleAnnotations; cr.accept(new ClassVisitor(ASM4,cw) { @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { AnnotationNode an = new AnnotationNode(desc); nlist.add(an); return an; } }, 2); for (AnnotationNode annotationNode : nlist) { List vl = annotationNode.values; System.out.println(vl.get(0).toString() + vl.get(1)); } } }
package hello.asm.bean;@Table(name="BASE_USER")@Encode("utf-8")public class User {    	@Column(name = "name")	private String name = "loowj";    	@Column(name = "id")	private String id = "001";		/**	 * 构造函数1	 */	public User(String id,String name) {	}	public User(String name){	}	private User(){}		public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getId() {		return id;	}	public void setId(String id) {		this.id = id;	}	public void getUser(){		System.out.println(this.id + "   " +this.name);	}	}
package hello.asm.bean;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public   Table {    public String name();}

package hello.asm.bean;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(value={ElementType.TYPE,ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public   Encode {    String value();}

转载于:https://my.oschina.net/wjgood/blog/61808

你可能感兴趣的文章
DMURLConnection
查看>>
iframe 与主框架相互访问方法
查看>>
first
查看>>
mysql存储过程调试工具
查看>>
nginx
查看>>
解决jenkins启动完会kill掉的衍生进程
查看>>
关于Linux下s、t、i、a权限
查看>>
js 获取CSS样式
查看>>
Symfony2安装时欢迎页面CSS混乱的解决方案
查看>>
Selenium-webdriver 系列Python教程(3)————如何执行一段JS
查看>>
Apple 企业开发者账号&邓白氏码申请记录
查看>>
视差动画原理分析【1】
查看>>
JavaScript基础(三):语句和符号
查看>>
分治法
查看>>
Windows下Zookeeper简单配置
查看>>
lucene4.7 过滤Filter(六) ---特殊的filter(DuplicateFilte)
查看>>
Oracle——22序列(sequence)
查看>>
Javascript全局函数
查看>>
jQuery表格插件和分页插件
查看>>
基于AOP动态切换数据源实现读写分离
查看>>