JAvaスクリプトフレームワークの紹介と応用(1)


スクリプト言語はjavascriptやgroovyなどの便利さ、簡潔さなどの特性でますます注目されています.スクリプト言語を使用してjavaと同じ機能を完了すると、Javaのリストではjavaコードとgroovyコードの比較は次のようになります.
 
 
//   java  
List<String> list = new ArrayList<String>();
list.add("obj1");
list.add("obj2");

//   groovy  
list = ["obj1", "ojb2"];

 
    スクリプト言語がより簡潔で迅速であることがわかります.スクリプト言語は解釈的な言語であることが多いため、コンパイルを必要とせずに実行中に動的に変更すると、テストが容易になります.したがって,迅速な作成と頻繁な修正が必要であることを前提に,スクリプト言語の優位性が現れる.JAvaは1.6からスクリプト言語のサポートを標準APIに追加しており、javax.scriptパッケージにはスクリプトフレームワークのすべての機能が表示されます.BSFが使用されている場合は、スクリプトフレームワークにも比較的熟知していると信じられています.javaスクリプト言語フレームワークが提供する主な機能は、次のとおりです.
 
1、ScriptEngine標準インタフェースを使用してスクリプト言語を実行する(コードセグメント、関数、戻り値の取得などを含む)
 
     このインタフェースは、文字列、ファイルを使用して所定のスクリプトを実行し、戻り値を取得する主な使用インタフェースです.背後には、各スクリプト言語エンジンの実装があります.
 
2.BindsとScriptContextを使用してjavaとスクリプト言語間のパラメータ伝達を提供する(ネーミングスペースをサポートする)
 
     各スクリプトエンジンには、パラメータ伝達のために独立したネーミングスペースがあり、グローバルなネーミングスペースとカスタムネーミングスペースも提供されます.JAvaプログラムとスクリプト言語はネーミングスペースを介してパラメータを相互に伝達できます
 
3、スクリプト言語のコンパイル/解析キャッシュ(groovyなど)を提供し、実行効率を高める
 
     これは、Compilableインタフェースを実装したエンジンにとって、コンパイル/解析結果をキャッシュして、繰り返し実行の効率を提供するために使用することができる.例えばgroovyはコードをjavaバイトコードにコンパイルして実行することができ,効率の向上は非常に明らかである.
 
4、その他の機能
 
    実は私たちは前の3つの主要な機能を使えば十分で、javaプログラムでスクリプト言語を使う便利さを満たすことができます.JAva 1.6版のJREにはjavascriptスクリプト言語の実装エンジンが付属しており、ECMAScript仕様の実装Mozilla Rhinoを採用している.したがって、デフォルトでは、スクリプトフレームワークを使用してjavaプログラムでjavascriptコードを実行および呼び出すことができます.Javascriptでは、ECMAScript仕様に互換性があるため、通常ブラウザで使用されているのとほぼ同じです.違いはブラウザのjavascriptがDOMオブジェクトに対して操作できる機能を拡張していることです.これはECMAScript仕様にはないので、alertのような方言機能を使うことは期待できません(すべてのwindowオブジェクトの属性や方法は使用できません).
 
    スクリプトフレームワークを使用してjavascriptを実行するのは簡単です.簡単な例を挙げると、3つのステップだけでいいです.
 
 
//        ,             
ScriptEngineManager sem = new ScriptEngineManager();

//   js  
ScriptEngine jsEngine = sem.getEngineByExtension("js");

//     js      
jsEngine.eval("println('Hello world')");

 
    ScriptEngineManagerの動的検索方法は、classpathパス内のすべてのjarファイルを検索し、jarファイルから読み込みます.
/META-INF/services/javax.script.ScriptEngineFactoryファイルの内容です.このファイルはScriptEngineFactoryインタフェースの実装を指定したものです.
実装クラス.jre/lib/resources.jarファイルにjavascriptエンジンのインプリメンテーション登録を見つけることができます.
 
    ScriptEngineはスクリプトの実行を担当します.ここでは文字列を使用します.また、Readerオブジェクトがストリームからスクリプトの内容を読み込むこともできます.jsファイルをクラスディレクトリの下に保存します.名前はjs-1.jsです.
 
 
var array = [12,13,15,16,18];
for (var i = 0; i < array.length; i ++) {
	println("index:" + i + ",value:" + array[i]);
}

var obj = {};
obj.a = 'i am a';
obj.b = 'i am b';
for (var p in obj) {
	println("Attribute:" + p + ",value:" + obj[p]);
}
 
    次に、次のjavaコードをScriptDemoクラスファイルに保存して実行します.
 
 
ScriptEngineManager sem = new ScriptEngineManager();

ScriptEngine jsEngine = sem.getEngineByExtension("js");

jsEngine.eval(new InputStreamReader(ScriptDemo.class.getResourceAsStream("js-1.js")));

 
    実行後、コンソールで目的の結果を印刷できます.他のスクリプト言語のサポートを使用する場合は、javaスクリプトフレームワークを実現したjarパッケージをclasspathに直接投げればいいです.例えばgroovyの発行パッケージはすでにこの仕様を実現しており、その発行パッケージをclasspathに入れて呼び出すだけでよい.
 
 
    时间の原因、しばらくこのように书くようにしましょう、后で更にゆっくりとその他の特性を补います...