执行纯字符串中的java代码,无需热编译,巧用javascirpt

原创
2014/08/27 10:07
阅读数 813

最近想怎么才能不用热编译去执行出想要的纯字符串的java代码。后来发现可以通过字符串执行javascript。

后来一想...javascript貌似也能执行java里面的类和方法...那....结合了会怎么样

package com.lianxi;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

public class Lianxi4 {

public String aa;

public static void a(){

System.out.println("======a");

}

public void b(){

System.out.println("------------------b"+aa);

}

public static void main(String[] args) {

             String name="haha";

//根据字符串,进行java方法的调用

try{

ScriptEngineManager manager = new ScriptEngineManager();

   ScriptEngine jsEngine;  

   jsEngine = manager.getEngineByExtension("js");

                   //这里的字符串采用的是js的写法,但可以调用java代码,发现连java.lang这个包也是要手动引入的

   jsEngine.eval("importPackage(com.lianxi,java.lang);"+//引入了包

        "var l=new Lianxi4();l.aa='123';l.b();" +//创建了java对象...给l对象的aa属性赋值,并调用l的b()方法

        "for(var j=0;j<=10;j++){System.out.println('---------====');}"//执行输出...在控制台也循环输出

        );

}catch(Exception e)

{

e.printStackTrace();

}

}

}


这个方式虽然可以实现通过字符串执行java代码,但里面用到的对象都要重新new出来...而且这个相当于一个独立的方法...和main方法中上面定义的参数没有关系...想要获取到该方法中的其他用到的参数来拼接字符串中的方法,比如要输出上面定义的String name...那就需要再封装一套类似el表达式的方式    比如${name}; 用此方式去实现动态字符串获取方法中的其他用到的参数,进行替换

此方法只适用于jdk1.6及以上

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部