MVELとOgnlの使い分け
2008.09.23 Tuesday | development
Javaの話題。
処理速度では速い順に Ognl2 > MVEL2 > Ognl1 > MVEL1.
MVELのコンパイル済み式を実行させる場合(MVEL2)、注意しないといけないのは、メソッド呼び出しの場合は毎回新しい評価を返すが、フィールドに直接アクセスする場合はコンパイルされた後最初に評価された結果が返却されるようだ。
AクラスのgetSTR(){return STR;}みたいなメソッドを追加してMVEL expression 2での評価式を A.getSTR のようにすると、毎回違う結果が帰ってくる。STRがBeanみたいなオブジェクトだとどうなるのかはまだ検証していない。
MVELのコンパイル済み式の実行はMVEL.eval() や Ognl.getValue() よりも圧倒的に速いので上手く使いこなしていきたいものです。
OGNLよりも速いと提唱しているMVELは、評価式が複雑なケースになるとOgnlのparseExpressionよりも速いはず・・ですよね?w
例えばstaticフィールドを持つクラスAがある。class A
public class A { public static String STR = "0"; }
resultの結果は、1,2.MVEL expression 1
A.STR = "1"; String result = MVEL.eval("A.STR").toString(); A.STR = "2"; String result = MVEL.eval("A.STR").toString();
resultの結果は3,3.MVEL expression 2
A.STR = "2"; Object expression = MVEL.compileExpression("A.STR"); A.STR = "3"; String result = MVEL.executeExpression(expression ).toString(); A.STR = "4"; String result = MVEL.executeExpression(expression ).toString();
resultの結果は5,6.Ognl expression 1
A.STR = "5"; String result = Ognl.getValue("A@STR",null).toString(); A.STR = "6"; String result = Ognl.getValue("A@STR".null).toString();
resultの結果は8,9.Ognl expression 2
A.STR = "7"; Object expression = Ognl.parseExpression("A@STR"); A.STR = "8"; String result = Ognl.getValue(expression,null).toString(); A.STR = "9"; String result = Ognl.getValue(expression,null).toString();
処理速度では速い順に Ognl2 > MVEL2 > Ognl1 > MVEL1.
MVELのコンパイル済み式を実行させる場合(MVEL2)、注意しないといけないのは、メソッド呼び出しの場合は毎回新しい評価を返すが、フィールドに直接アクセスする場合はコンパイルされた後最初に評価された結果が返却されるようだ。
AクラスのgetSTR(){return STR;}みたいなメソッドを追加してMVEL expression 2での評価式を A.getSTR のようにすると、毎回違う結果が帰ってくる。STRがBeanみたいなオブジェクトだとどうなるのかはまだ検証していない。
MVELのコンパイル済み式の実行はMVEL.eval() や Ognl.getValue() よりも圧倒的に速いので上手く使いこなしていきたいものです。
OGNLよりも速いと提唱しているMVELは、評価式が複雑なケースになるとOgnlのparseExpressionよりも速いはず・・ですよね?w
