Spring SpEL式学習ノート


対照的にjavaは静的言語です.私たちが今日お話しするのは、ダイナミックな「言語」---SpELです.
動的言語と静的言語の最も顕著な違いは、例を挙げると、「'Hello'.toUperCase()」というのは普通の文字列にすぎず、違いは
それをコンパイルして実行できるかどうかで結果が得られます.動的言語は文字列をプログラム文として解釈できるということです.まだわからないなら
話は大丈夫ですが、次の例を見てみましょう.(次は例でご紹介します)
public void testSpEL1() {
//ExpressionParser Spring3     ,           。
  ExpressionParser parser = new SpelExpressionParser();
  Expression exp = parser.parseExpression(" 'Hello,World' ");
  System.out.println((String)exp.getValue());
 }

ここで「Hello,World」は文字列で、説明すると文字列なので、印刷結果は「Hello,World」です.
2つ目の例:呼び出し方法
public void testSpEL2() {
ExpressionParser parser = new SpelExpressionParser();
Expression exp=parser.parseExpression(" 'Hello'.concat(' World!')");  //        String concat  
//Expression exp=parser.parseExpression("newString('helloworld').toUpperCase()");
Stringmessage=(String)exp.getValue();
}

3つ目の例:呼び出しプロパティ
ExpressionParser parser= new SpelExpressionParser();

Expression exp=parser.parseExpression("'HelloWorld'.bytes");  //      byte

//Expression exp=parser.parseExpression("'HelloWorld'.bytes.length"); //       
byte [] bytes=(byte[])exp.getValue();

4つ目の例:呼び出しクラスのプロパティ(次から複雑になります)
@Resource
public User user;  //    ,user.getName()   xiaoling

public void testSpEL() {

    // “  ”,   u     
    EvaluationContext context = new StandardEvaluationContext(user);  
    ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("username"); //==user.getUsername()
    System.out.println((String)exp.getValue(context));  //  :xiaoling
 }

あるいは、より簡潔な方法で
  System.out.println((String)exp.getValue(user));
これで値域を設ける必要はありません!ほほほ!
5つ目の例:オブジェクトのプロパティに値を設定する
StandardEvaluationContext  context = new StandardEvaluationContext(user);

parser.parseExpression("username").setValue(context, "ling");

6つ目の例:判断を下す
Expression exp=parser.parseExpression("name=='xiaoling' ");
boolean result=exp.getValue(context,Boolean.class);  //evaluate stotrue

印刷、結果true
これを見て、あなたはまだ霧の水かもしれません:これはどんな新しい特性ですか、何の役に立ちません!
SpELがjavaを「動く」ことに使います!(私個人の意見です!!)
次に、bean.xmlにSpELを使います.
 
まず例を見る(例一)

   


どうですか.xmlファイルに値を付けることができます.ほほほ!
 
valueには#{}で値を付けます.T(java.lang.Math)とは、あるクラス、すなわちMathというクラスを指す.
 
この例(例2):systemProperties
 
 
SystemPropertiesは事前に定義されており、javaファイルのSystem.getProperty(「user.region」)に相当し、現在のコンピュータが存在する国を取り出すことができます.
 
 
例3:xmlの他のbeanを参照する









SpELはannotationでも使用できます.
例1:属性に使用
public static class FieldValueTestBean{
   @Value("#{systemProperties['user.region']}")
   private String defaultLocale;

   //set get  
   public void setDefaultLocale(StringdefaultLocale) {
      this.defaultLocale=defaultLocale;
   }

   public StringgetDefaultLocale(){
      returnthis.defaultLocale;
   }
}

例2:方法に用いる
public static class PropertyValueTestBean{
   private String defaultLocale;
   @Value("#{systemProperties['user.region']}")
   public void setDefaultLocale(String defaultLocale){
      this.defaultLocale=defaultLocale;
   }
   public String getDefaultLocale(){
      return this.defaultLocale;
   }

}
}

例3:Autowiredとコンストラクタ
public class SimpleMovieLister{
   private MovieFinder movieFinder;
   private String defaultLocale;
   @Autowired
   public void configure(MovieFinder movieFinder,
      @Value("#{systemProperties['user.region']}"}String defaultLocale){
         this.movieFinder=movieFinder;
         this.defaultLocale=defaultLocale;
      }
//...
}