美文网首页一天一点学Java
Java-Javaassist(一)

Java-Javaassist(一)

作者: Sandy_678f | 来源:发表于2018-04-20 17:19 被阅读0次

Javaassist

/**
 * Copyright (C) 2017-2018 All Rights Reserved.
 */
package javassistdemo;

import javassist.*;

import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestJavaAssist {

    //创建线程池
    public static ClassPool pool = ClassPool.getDefault();
    public static CtClass clazz = pool.makeClass("Employ");

    public static void test01() throws CannotCompileException, IOException, NotFoundException {

        try {
            //创建属性方法一
            CtField ctFieldOne = CtField.make("private Integer empId;", clazz);
            clazz.addField(ctFieldOne);
            CtField ctFieldTwo = CtField.make("private Integer empAge;", clazz);
            clazz.addField(ctFieldTwo);

            //创建属性方法二
            CtField ctFieldThree = new CtField(pool.get("java.lang.String"),"empName", clazz);
            ctFieldThree.setModifiers(Modifier.PRIVATE);
            clazz.addField(ctFieldThree);

            //创建含参构造器
            CtConstructor constructor = new CtConstructor(new CtClass[]{pool.get("java.lang.Integer"), pool.get("java.lang.String"),pool.get("java.lang.Integer")}, clazz);
            constructor.setBody("{this.empId = $1; this.empName = $2; this.empAge = $3;}");
            clazz.addConstructor(constructor);

            //创建方法方法一
            CtMethod  ctMethodOne = CtMethod.make("public Integer getEmpId() {return empId;}", clazz);
            clazz.addMethod(ctMethodOne);
            CtMethod ctMethodTwo = CtMethod.make("public void setEmpId(Integer empId) {this.empId = empId;}", clazz);
            clazz.addMethod(ctMethodTwo);

            //创建方法方法二
            clazz.addMethod(CtNewMethod.getter("getEmpAge", ctFieldTwo));
            clazz.addMethod(CtNewMethod.setter("setEmpAge", ctFieldTwo));

        } catch (CannotCompileException e) {
            e.printStackTrace();
        }
        clazz.writeFile( System.getProperty("user.dir")+"/src/main/java/javassistdemo/");
    }

    public static void main(String[] args) {
        try {
            test01();

            Class clazzEmploy = clazz.toClass();

            //调用含参构造器
            Object obj = clazzEmploy.getConstructor(Integer.class,String.class,Integer.class).newInstance(1,"Sandy",8);

            //调用方法
            Method method =clazzEmploy.getDeclaredMethod("getEmpAge");
            System.out.println("method.invoke(obj): " + method.invoke(obj));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

main()方法运行完test01()方法后,在指定路径下会生成Employ.class文件。

相关文章

  • Java-Javaassist(一)

    Javaassist main()方法运行完test01()方法后,在指定路径下会生成Employ.class文件。

  • Java-Javaassist(二)

    Class File Format

  • 。一一,一,一,一。

    一,、

  • 一 一

    2018年6月22日 星期五 雨 一水一万物 一星一宇宙 一字一文章 一书一世界 一读一微笑 一赞一知音

  • 一 一

    杨德昌《一 一》,早年曾看过一遍。 婷婷短发,白净,蓝色衬衫,学生裙,黑皮鞋,白袜子,学习很好的中学女生。温柔,懂...

  • 一 一

    给自己无处安放的灵魂找到了家!简书,我的新写作时光!继续,在流年里拾荒,禅落一身的光!

  • 一.一

  • 一.一

    一节车厢,一只行囊,肯为当时一念疯狂。 一根点燃,一缕惆怅,不许未来一片迷茫。 一眼远看,一众不详,哪知各位一去何...

  • 一(一)

    我叫一,总有人喜欢在背后说我,因为很多时候我都是自己一个人。很多人都说我很孤单,看起来很可怜,但我觉得很奇怪,他们...

  • (一-一)

    白天不看书晚上开灯照亮全宿舍的sb们该睡了

网友评论

    本文标题:Java-Javaassist(一)

    本文链接:https://www.haomeiwen.com/subject/otjzkftx.html