Spring高級配置の運転時に注入します.
6427 ワード
以前、Beanの属性値を設定した時は、ハードコードの形式を採用していました.例えば、BlankDiscを定義する場合:属性プレースホルダ Spring表現言語(SpEL) 1.属性のプレースホルダを使って外部の値を注入します.
Evironmentのget Property()方法は4つの重荷重方法があります. String get Property String get Property T get Property T get Property(String key,Class type,T default Value) 前の2つの形態のget Property()方法はいずれもStringタイプの値を返します.後の2つの重み付け方法は、直接文字列に戻るのではなく、取得した値を指定されたタイプの値に変換します.例えば、接続池における接続全体の数を維持します. String[]getActive Profiles():profileの名前をアクティブにする配列を返す. String[]get Default Profile():デフォルトのprofile名の配列を返す. bootlean accepts Prifile:もしenvironmentが所与のprofileをサポートしたらtrueに戻ります. 1.2解析属性のプレースホルダ
Spring組立において、プレースホルダの形式は「${...)」パッケージの属性名です.属性のプレースホルダを使って、XMLでtomcat接続プールのbeanの属性を解析します.
Spring 3はSpring表現(Spring Excpression Language,SpEL)を導入しており、彼は強力で簡潔な方法でbean属性とコンストラクタパラメータに値を組み立てることができます.この過程で使用される表現は実行時に計算されます.SpELの特性は以下の点があります.は、beanのIDを使用してbean を参照する.起動方法とアクセス先の属性 は、値を算術、関係、論理演算を行う .正規表現マッチング セット操作 2.1 SpEl表現の例
書式
説明
ヽoo{1}
得られた値は1です
皰{T(System).current TimeMillis()
現在の時間のミリ秒値を取得します.T()の表現は、java.lang.Systemをjavaに対応するタイプとみなします.この方法で対応する静的方法を呼び出します.
ヽoo{blankDisc.title}
IDがblankDisc beanの属性値を取得します.
皱{system Propertys['disc.title]]
システムのプロパティをsystem Propertysオブジェクトで参照します.
上のいくつかの基本的なSpElのサンプルだけです.後は重点的に紹介します.まずSpEL式を使ってbeanを組み立てる属性を見てみます.
2.2ワードの額面を表す
SpEL文字数パターンを使用すると、整数、浮動小数点、String、Booleanタイプの値を表します.
SpELは、IDによって他のbean、beanの属性とbeanを導入する方法があります.
2.4式でタイプを使う
SpEL表現がクラスのスコープにアクセスする場合、T()という鍵となる演算子を使用します.
SpELは複数の演算子を提供しています.これらの演算子はSpEL式に使用できます.
演算子の種類
演算子
算術演算子
+、-、*、/、%、^
比較演算子
、=、<=>=、lt、gt、eq、ge
条件演算子
?:(ternary)、?:(Elvis)
論理演算子
and、or、not、
正規表現
matches
2.6正規表現を計算する
SpELは、matches演算子によって式中のモードマッチングをサポートしています.マッチングしたらtrueに戻ります.さもなければfalseに戻ります.メールボックスが正規表現に合っているかどうかを判断します.
SpEL参照リストの要素の一つとして、
投影演算子(.![])は、セットオブジェクトの特定のフィールドを別のセットに投影し、次のセットでは、曲の名前を他のStringタイプのセットに投影する.
@Bean
public BlankDisc blankDisc(){
return new BlankDisc("This is BlankDisc", "The Beatles");
}
これに類似して、XMLを採用する方式もハードコードです.
ハードコードのデメリットはご存知のようですので、これらの値をプログラム実行時に確認してもらえますか?実はSpringはもう二つの方法で運転時に注入する機能を提供しています.@Autowired
Environment env;
public BlankDisc blanKDiscBean2(){
return new BlankDisc(
env.getProperty("disc.title"),
env.getProperty("disc.artist"));
}
1.1 Springを深く学ぶEvironmentEvironmentのget Property()方法は4つの重荷重方法があります.
int connectionCount = env.getProperty("db.connoctionCount",Integer.class,30);
get Property()を使って属性を取得する時、もしこの属性が定義されていないなら、彼が取得したのはnullです.このような状況を発生させたくないなら、get RequedProperty()方法を使うことができます.//
env.getRequiredProperty("disc.title"),
env.getRequiredProperty("disc.artist"));
disc.titleまたはdisc.arstが定義されていない場合は、Illagal StateExceptionの異常を投げます.ある属性が存在するかどうかを確認したいなら、contains Propertyを呼び出すことができます.boolean titleExists = env.containsProperty(“disc.title”);
属性をクラスに解析したいなら、get PropertyAsplassを使用できます.Class blankDisc = env.getPropertyAsClass("disc.class",BlankDisc.class);
属性関連の機能に加えて、Evironmentはどのprofileがアクティブな状態にあるかを確認する方法を提供しています.Spring組立において、プレースホルダの形式は「${...)」パッケージの属性名です.属性のプレースホルダを使って、XMLでtomcat接続プールのbeanの属性を解析します.
プレースホルダを使うには、PropertySources Placeholder Configrer beanを配置する必要があります.@Bean
public static PropertySourcesPlaceholderConfigurer placehoderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}
Xml構成で名前空間に使用する要素は、PropertySources PlaceholderConfigrer beanを生成することができます.
2.Spring表現言語で構成するSpring 3はSpring表現(Spring Excpression Language,SpEL)を導入しており、彼は強力で簡潔な方法でbean属性とコンストラクタパラメータに値を組み立てることができます.この過程で使用される表現は実行時に計算されます.SpELの特性は以下の点があります.
書式
説明
ヽoo{1}
得られた値は1です
皰{T(System).current TimeMillis()
現在の時間のミリ秒値を取得します.T()の表現は、java.lang.Systemをjavaに対応するタイプとみなします.この方法で対応する静的方法を呼び出します.
ヽoo{blankDisc.title}
IDがblankDisc beanの属性値を取得します.
皱{system Propertys['disc.title]]
システムのプロパティをsystem Propertysオブジェクトで参照します.
上のいくつかの基本的なSpElのサンプルだけです.後は重点的に紹介します.まずSpEL式を使ってbeanを組み立てる属性を見てみます.
public BlankDisc(
@Value("#{systemPropertys['disc.title']}") String title,
@Value("#{systemPropertys['disc.artist']}") String artist){
this.title = title;
this.artist = artist;
}
上記の例では@Valueコメントを使用して、注釈にSpEL表式を設定します.上でいくつかの簡単な例を学びました.SpEL表式解析で得られた値をbeanに注入する方法も学びました.Spel式サポートの基礎式を続けて勉強しましょう.2.2ワードの額面を表す
SpEL文字数パターンを使用すると、整数、浮動小数点、String、Booleanタイプの値を表します.
#{1}
#{3.14159}
#{9.87E4}
#{'Hello'}
#{false}
2.3 bean属性と方法の導入SpELは、IDによって他のbean、beanの属性とbeanを導入する方法があります.
#{blankDisc}
#{blankDisc.title}
#{blankDisc.sayHello()}
方法の戻り値を処理しても良い場合は、戻り値タイプの属性または方法を直接呼び出し、sayHello()と仮定する.戻り値はStringタイプです.#{blankDisc.sayHello().toUpperCase()}
で、戻り値の大文字形式が取得できます.しかし、戻り値がnullであれば、呼び出された方法は空の指針に異常があります.この場合を防ぐために使用できますか?戻り値がnullであるかどうかを判断します.SayHello()方法の戻り値がnullである場合、SpElはtopperCaseを呼び出しません.方法は、SpELの戻り値がnullです.2.4式でタイプを使う
SpEL表現がクラスのスコープにアクセスする場合、T()という鍵となる演算子を使用します.
#{blankDisc.sayHello()?.toUpperCase()}
演算子の結果はクラスのオブジェクトで、java.lang.Mathを表します.Mathの静的方法と定数にアクセスできます.#{T(java.lang.Math).PI}
#{T(java.lang.Math).random()}
2.5 SpEL演算子SpELは複数の演算子を提供しています.これらの演算子はSpEL式に使用できます.
演算子の種類
演算子
算術演算子
+、-、*、/、%、^
比較演算子
、=、<=>=、lt、gt、eq、ge
条件演算子
?:(ternary)、?:(Elvis)
論理演算子
and、or、not、
正規表現
matches
2.6正規表現を計算する
SpELは、matches演算子によって式中のモードマッチングをサポートしています.マッチングしたらtrueに戻ります.さもなければfalseに戻ります.メールボックスが正規表現に合っているかどうかを判断します.
#{admin.email matches '[a-zA-Z0-9.-%+-]+@[a-zA-Z0-9.-]+\\.com'}
2.7集合を計算するSpEL参照リストの要素の一つとして、
#{T(java.lang.Math)}
を使用して、リストの5番目の要素(0に基づいて開始)を取得します.[]は、集合または配列からインデックスに従って要素を抽出します.SpELは、クエリー演算子(.?[])を提供します.彼は、集合をフィルタリングし、集合のサブセットを得るために使用します.次に、Aerossmithの歌をフィルタリングします.#{jukebox.songs.?[artist eq 'Aerosmith']}
.^[]クエリーの最初の一致項.$[]クエリの最後の一致項目投影演算子(.![])は、セットオブジェクトの特定のフィールドを別のセットに投影し、次のセットでは、曲の名前を他のStringタイプのセットに投影する.
#{jukebox.songs.![title]}
また、投影される曲をフィルタリングして、次はAerosithの曲のtitleを取得します.#{jukebox.songs.?[artist eq 'Aerosmith'.![title]]}
これから運行する時に注いだ内容を全部紹介しました.やっと終わりました.来月からはSpringのAopメカニズムを勉強します.楽しみにしています.come on!