java支持脚本语言

  Java SE6中添加了脚本语言API,可通过java进行灵活的操作脚本语言。以下是示例代码:

//操作属性
	public static void attributeInBindings() throws ScriptException {
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		ScriptContext context = engine.getContext();
		context.setAttribute("name", "Alex", ScriptContext.GLOBAL_SCOPE);
		engine.eval("println(name);");//输出Alex
	}

 

//调用方法
	public static void invokeFunction() throws ScriptException, NoSuchMethodException{
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		String scriptText = "function greet(name){println('hello,'+name);}";
		engine.eval(scriptText);
		Invocable invocable = (Invocable)engine;
		invocable.invokeFunction("greet", "wenxin");
	}
 
//调用脚本中对象成员方法
	public static void invokeMethod() throws ScriptException, NoSuchMethodException{
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		String scriptText = "var obj={getGreeting:function(name){return 'hello,'+name;}};";
		engine.eval(scriptText);
		Invocable invocable = (Invocable)engine;
		Object scope = engine.get("obj");
		Object result = invocable.invokeMethod(scope, "getGreeting", "dwen");
		System.out.println(result);
	}
 
//进行脚本编译{解释执行的方式运行脚本的速度比编译之后再运行会慢些,当一段脚本需要被多次重复
	//执行时,可以对脚本进行编译。编译之后脚本在执行时不需重复解析}
	public static void compliedScript() throws ScriptException, NoSuchMethodException{
		CompiledScript script = null;
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		String scriptText = "function getGreeting(name){println('hello,'+name);}";
		if (engine instanceof Compilable) {//实例判断,因为不是所有脚本语言都支持编译
			script = ((Compilable) engine).compile(scriptText);
			script.eval();
			Invocable invocable = (Invocable)engine;
			invocable.invokeFunction("getGreeting", "wenxin");
		}
	}

 操作实现java接口:

public interface IGreet {
	public String getGreeting(String name);
}
 
	//在脚本中实现java接口
	public static void useInterface() throws ScriptException{
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		String scriptText = "function getGreeting(name){return 'hello,'+name;}";
		engine.eval(scriptText);
		Invocable invocable = (Invocable)engine;
		IGreet greet = invocable.getInterface(IGreet.class);
		System.out.println(greet.getGreeting("接口"));
	}
 

 

 

你可能感兴趣的:(java)