zoukankan      html  css  js  c++  java
  • 尚学堂 216 java中的字节码操作

    所谓的字节码操作就是操作我们已经加载的字节码

    接下来我们重点来讲解javaassist类库

    使用需要下载jar包,把jar包添加到对应的工程之后

    package com.bjsxt.test;
    
    
    public class Emp {
        
        private int empno;
        private String ename;
        
        public void sayHello(int a){
            System.out.println("sayHello,"+a);
        }
        
        public int getEmpno() {
            return empno;
        }
        public void setEmpno(int empno) {
            this.empno = empno;
        }
        public String getEname() {
            return ename;
        }
        public void setEname(String ename) {
            this.ename = ename;
        }
        
        public Emp(int empno, String ename) {
            super();
            this.empno = empno;
            this.ename = ename;
        }
        
        public Emp() {
        }
    }

    我们使用javaAssit工具手动的创建一个Emp .class文件

    我们来看程序的代码

    package com.bjsxt.test;
    
    import javassist.CannotCompileException;
    import javassist.ClassPool;
    import javassist.CtClass;
    import javassist.CtConstructor;
    import javassist.CtField;
    import javassist.CtMethod;
    
    /**
     * 测试使用javassist生成一个新的类
     * @author 尚学堂高淇 www.sxt.cn
     *
     */
    public class Demo01 {
        public static void main(String[] args) throws Exception {
            ClassPool pool = ClassPool.getDefault();
            CtClass cc = pool.makeClass("com.bjsxt.bean.Emp");
            
            //创建属性
            CtField f1 = CtField.make("private int empno;", cc);
            CtField f2 = CtField.make("private String ename;", cc);
            cc.addField(f1);
            cc.addField(f2);
            
            //创建方法
            CtMethod m1 = CtMethod.make("public int getEmpno(){return empno;}", cc);
            CtMethod m2 = CtMethod.make("public void setEmpno(int empno){this.empno=empno;}", cc);
            cc.addMethod(m1);
            cc.addMethod(m2);
            
            //添加构造器
            /*
             * CtClass.intType,pool.get("java.lang.String 构造函数的int和string类型
            */
            CtConstructor constructor = new CtConstructor(new CtClass[]{CtClass.intType,pool.get("java.lang.String")}, cc);
            constructor.setBody("{this.empno=empno; this.ename=ename;}");
            cc.addConstructor(constructor);
            
            cc.writeFile("c:/myjava"); //将上面构造好的类写入到c:/myjava中
            System.out.println("生成类,成功!");
        }
    }

    我们运行上面的代码,就在c盘生成了 一个Emp .class文件

  • 相关阅读:
    27.TreeMap
    26.HashCode
    25.HashTable
    myeclipse快捷键
    spring 配置
    jdbcType和javaType对应关系
    Ajax表单提交
    ajax
    JQuery及Form插件使用
    jsp标准数据库
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/7285351.html
Copyright © 2011-2022 走看看