Java脚本引擎:
1 Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的
Java脚本API是联通Java平台和脚本语言的桥梁
可以把一些复杂的业务逻辑交给脚本语言处理,这样处理提高了开发效率
ScriptEngineManager manager=newScriptEngineManager();
ScriptEngine engine=manager.getEngineByName("javascript");
//执行javascript代码
engine.eval("var x=1;");
//存入变量
engine.put("y","hello");
//提取变量
engine.get("y");
Java操作字节码可以实现如下功能:
1 动态生成新的类
2 动态改变某个类的结构(添加,删除,修改类的属性和方法)
优势:
1 比反射开销小,性能高
2 JAVAasist 性能高于反射,低于ASM
ClassPool classPool=ClassPool.getDefault();
CtClass ctClass=classPool.makeClass("TestReflect.ClassSource");
//创建属性
CtField ctField=CtField.make("private String sex='man';",ctClass);
ctClass.addField(ctField);
//创建方法
CtMethod ctMethod=CtMethod.make("public String getSex(){return this.sex}",ctClass);
ctClass.addMethod(ctMethod);
1 Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的
Java脚本API是联通Java平台和脚本语言的桥梁
可以把一些复杂的业务逻辑交给脚本语言处理,这样处理提高了开发效率
ScriptEngineManager manager=newScriptEngineManager();
ScriptEngine engine=manager.getEngineByName("javascript");
//执行javascript代码
engine.eval("var x=1;");
//存入变量
engine.put("y","hello");
//提取变量
engine.get("y");
Java操作字节码可以实现如下功能:
1 动态生成新的类
2 动态改变某个类的结构(添加,删除,修改类的属性和方法)
优势:
1 比反射开销小,性能高
2 JAVAasist 性能高于反射,低于ASM
ClassPool classPool=ClassPool.getDefault();
CtClass ctClass=classPool.makeClass("TestReflect.ClassSource");
//创建属性
CtField ctField=CtField.make("private String sex='man';",ctClass);
ctClass.addField(ctField);
//创建方法
CtMethod ctMethod=CtMethod.make("public String getSex(){return this.sex}",ctClass);
ctClass.addMethod(ctMethod);