java中怎么执行字符串中的代码 本帖最后由 Rlay_2 于 2013-01-24 19:54:00 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 以我的理解能力 觉得是没有办法的,但是你可以 试试动态代理什么的东西, ASM 是一个 Java 字节码操纵框架。它可以直接以二进制形式动态地生成 stub 类或其他代理类,或者在装载时动态地修改类。ASM 提供类似于 BCEL 和 SERP 之类的工具包的功能,但是被设计得更小巧、更快速,这使它适用于实时代码插装。 可以从这下点功夫试试 跟ASM包的字节码分析工具无关,楼主需要的是热编译。java可以热编译,标准API 提供了接口。 看下这个 javax.tools.JavaCompilerhttp://docs.oracle.com/javase/7/docs/api/javax/tools/JavaCompiler.html java没有很方便的方法来实现向诸如此类脚本语言的特性,即便你用楼上的方法,运行期热编译虽然很炫,但我觉得与其这样做你肯定能找到其他方法绕过这种方式,因为本来是为了方便,而这样做更复杂了,并且JavaCompiler需要javac如果没理解错的话,这就是说你的程序运行期需要jdk而不是jre,这对客户来说更不方便 1、java中的类编译、装载过程应该都是以类为单位的,这种字符串经过编译后应该就成了普通字符串,不能生成执行指令了。2、如果楼主是要动态生成一个类还是可以的,生成指令没想到能有什么办法 javassist和cglig底层用的是asm就可以动态根据java代码直接生成字节码文件 楼主可以研究一下javassist,直接添加到原来的方法中,很爽的! 这个也不难啊,说下我的思路将这些字符串代码写入一个java文件里,然后采用ant动态编译或者你在程序里自己调用javac来编译生成的java文件也可以,这样不就可以了然后你再在要调用的地方,采用反射的机制把生成的类注入进来就可以啦,如果你的这段代码是要嵌入到某个已有的java文件里,那就更简单了,还是采用文件输入输出的功能,将你的这段代码写入java文件里,比如某个java文件的某一方法里然后再动态编译下就OK啦 javassist和cglib就是干这个的直接动态生成字节码到内存中,不像jdk1.6里自带的JavaCompiler会生成.java文件到文件夹,再用ClassLoader进行load,然后再执行。 那要看楼主他们用的是什么版本的jdk了 基本的思路应该是这样的,就想问下,这样操作java的情况多吗?会不会到时候bug一堆啊? 太多了,SSH框架里,反射满天飞的!!! 表达式引擎可以满足你的要求,百度一下java 表达式引擎,很多开源实现 唯一讲到点子上的人!!楼主这种奇怪的需求,十有八九是由糟糕的设计造成的。楼上很多其他人连java 代码和java 字节码都分不清,就来乱讲。 大数阶乘运行结果不正确 我的迅雷程序加速问题(code1) 写个模拟记事本 点【保存文件】 数据写不进去 jdbc就是连接不上sqlserver 一个菜鸟问的问题 请大家帮帮忙送分) 进程 同步问题 关于浮点数 惭愧!问一个比较弱的问题。 java能否动态开辟string数组? 菜鸟求解 求解tomcat工作原理 关于字符串去重的问题
ASM 是一个 Java 字节码操纵框架。它可以直接以二进制形式动态地生成 stub 类或其他代理类,或者在装载时动态地修改类。ASM 提供类似于 BCEL 和 SERP 之类的工具包的功能,但是被设计得更小巧、更快速,这使它适用于实时代码插装。 可以从这下点功夫试试
2、如果楼主是要动态生成一个类还是可以的,生成指令没想到能有什么办法
楼主可以研究一下javassist,直接添加到原来的方法中,很爽的!
那要看楼主他们用的是什么版本的jdk了
基本的思路应该是这样的,就想问下,这样操作java的情况多吗?会不会到时候bug一堆啊?
太多了,SSH框架里,反射满天飞的!!!
唯一讲到点子上的人!!楼主这种奇怪的需求,十有八九是由糟糕的设计造成的。
楼上很多其他人连java 代码和java 字节码都分不清,就来乱讲。