javassist动态修改class

import java.io.IOException;
import java.io.PrintWriter;

import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.NotFoundException;

/**
 * @author zhangruming
 *
 */
public class calss2 {

/**
     * @param args
     * @throws NotFoundException
     * @throws CannotCompileException
     * @throws IllegalAccessException
     * @throws InstantiationException
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static void main(String[] args) throws NotFoundException, CannotCompileException, InstantiationException, IllegalAccessException, IOException, ClassNotFoundException {

ClassPool cp = ClassPool.getDefault();
        CtClass cc = cp.get("calss1");
        CtMethod cm = cc.getDeclaredMethod("sayhi");
        cm.setBody("System.out.println(\"hi class1\");");
        calss1 calss1 = (calss1) cc.toClass().newInstance();
        
        calss1.kk();
        
        String javaStr = "class calss3{public void sayhi(){System.out.println(\"hi!\");}}";
        String className = "calss3";
        PrintWriter   writer   =   new   PrintWriter(className + ".java");
        
        writer.close();
        Runtime.getRuntime().exec( "javac   -d   " + className    +   ".java ");
        Class   c   =   Class.forName(className);
          calss3  o   =   (calss3) c.newInstance();
          o.kk();
    }

}

class calss1{
    public void sayhi()
    {
        System.out.println("hi!");
    }
}

javassist动态修改class

时间: 2024-10-07 18:11:06

javassist动态修改class的相关文章

动态修改类注解(赋值)

1. 动态修改注解元凶: Java代码 /**  * 对象池工具类  *   * 目前提供ORM动态映射解决方案  *   * @author andy.zheng  * @since 2012.09.25 15:55 PM  * @vesion 1.0  *   */ public class ClassPoolUtils {                  /**      * 运行时动态ORM表映射      *       *       * @param entityClassNam

js 动态修改css文件

_.find(document.styleSheets[4].cssRules,function(cssRule){ if(cssRule.selectorText && cssRule.selectorText.indexOf(".navbar-fixed-top2")>-1){ cssRule.style.position=""; cssRule.style.top = "0px"; } if(cssRule.selec

js 动态修改属性值 动态修改图片,字等

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"   http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv = "content-type" content="text/html;charset=utf-8"/> &

Quartz总结(四):动态修改定时器二

前文:http://www.cnblogs.com/LiuChunfu/p/5598806.html 提到了一种动态修改定时器的方法, 其本质就是在job方法中注入Schedular的对象,从Schedular中获取Trigger(触发器),然后修改触发器的条件,重新启动. 前文中的方法,其实已经涉及到了循环调用. Job类 => Job => Trigger => Schedular =>Job类. 这样是很容易发生问题的,也确实在实际项目中发生了问题,特别是当Schedular

python动态修改函数名

困惑 在之前用sgmllib解析网页的时候遇到了·def do_a(self,attr)·这类的函数,可以自动识别<a>并解析其中内容. 在看learningpythonthehardway时也遇到了render.index()之类的随着url路由而变化的函数名. 遂思考,怎么才能实现这种动态的函数名呢? 研究 在使用Java.C.C#等其他语言时,并没有这类的功能.有可能是python独有功能,遂百度,未发现相关介绍. python为动态语言,且为面向对象语言,一切为对象.函数也是一个对象,

自己动手丰衣足食之轮播图一动态修改marginTop属性实现轮播图

引言 学习jQuery有年头了,刚开始学习时自己动手写过轮播图,放的久了以至于忘了大致思路了.现在转而做前端,抽空把jquery轮播图拿出来写一写,把各种思路都自己练习练习,这里主要使用动态修改marginTop来实现. 实现原理 1.除第一张图片外,其余图片全部隐藏,4张图片重叠起来. 2.导航按钮添加mouseover和mouseleave事件. 3.设置interval函数,启动定时器调用ShowImg函数. 4.动态修改marginTop属性达到上下轮播的效果,说道动态修改margin属

如何动态修改下拉列表的默认选中项

两种方法,第一种嵌入java代码:原理是首先获取需要选中项,然后用java代码控制那个标签内需要添加selected,其中Wish是放在request中的一个对象,仅此而已 <select name="wish.visible"> <%int visible=((Wish)request.getAttribute("wish")).getVisible(); %> <option value="1" <%if(

GridView 动态修改Item的LayoutParam导致Item的OnClickListener失效

GridView 动态修改Item的LayoutParam导致Item的OnClickListener失效 项目中为了实现图片的数量以及大小(类似微信图片的单张图片显示,和多张图片显示的大小是不同的)的效果,采用GridView动态修改边界,以及动态修改ImageView的大小的方式.实现效果如下: 单图: 多图 到目前为止,没有遇到什么问题,可是,之后就遇到一个问题,就是在ImageView上设置OnClickListener,第0张图片无法点击的问题. 追踪源码,发现一直运行到: 这个函数的

关于Unity中如何代码动态修改天空盒

在Unity中动态修改天空盒有两种方法: 一.为每个Texture建立天空盒材质球,需要更换时直接将对应材质球作为天空盒,缺点是建立的材质球太多 private void ChangeSkybox(Material newSkybox) { RenderSettings.skybox = newSkybox; } 二.只创建一个天空盒材质球,通过修改Material的贴图Cubemap来动态替换,优点是不需要创建额外的材质球 但是使用一般的Material.mainTexture属性无法赋值Cu