5.1:FactoryBeanの使用
7021 ワード
5.1 FactoryBeanの使用
一般的には、Springは、反射機構によりbeanのclass属性指定実現類を利用して、beanを実現します. .場合によっては、例示化されたbeanプロセスは比較的複雑であり、従来の方法によれば、多くの構成情報を提供する必要があり、構成の柔軟性が制限されている場合、符号化方式を採用することによって簡単なスキームが得られるかもしれない.Springはこのためにorg.Sprigframe ebork.bean.factory.FactoryBenの工場類インターフェースを提供しており、ユーザーはこのインターフェースを実現することによって、実際的なbeanの論理をカスタマイズすることができる.
FactoryBeanインターフェースはSpringフレームにとって重要な位置を占めています. 自身70個以上のFactoryBeanを実現しました.それらは実用化のいくつかの複雑なbeanの詳細を隠しており、上層アプリケーションに便利をもたらしています.Springから 3.0 始まります FactoryBeanは汎型のサポートを開始しました.すなわち、インターフェース宣言はFactoryBean<T>に変更されました. の形式:
このインターフェースでは、以下の3つの方法も定義されている.
T get Object():
FactoryBeanによって作成されたbeanの例を返し、isSingleton()がtrueに戻る場合、この例はSpring容器中の単一のインスタンスキャッシュ・プールに置かれる.
bollan isSingleton():
FactoryBeanによって作成されたbeanのインスタンスのスコープはsingletonですか?それともprototypeですか?
クラス getObject Type():
FactoryBeanで作成したbeanタイプを返します.
プロファイルの「bean」のclass属性構成の実装クラスがFactoryBeanである場合、 getBean()メソッドは、FactoryBean自体ではなく、FactoryBean(zhi get Object)メソッドによって返されるオブジェクトに相当し、FactoryBen(zhi getObject)がgetBen()メソッドを代理している.
例えば、次のカールの<bean>を従来の方式で構成する場合、Carの各属性はそれぞれ一つの<property>要素ラベルに対応します.
FactoryBeanの方式で実現すれば柔軟になります.次の例は、カンマ区切りによって、一度にCarのすべての属性に設定値を指定します.
このCarFactoryBeanがあれば、配置ファイルに次のようなカスタム構成を使用してCalを配置することができます. ビーンです
getBeanを呼び出したとき(「car」) 時,Springは反射機構によりCarFactoryBeanがFactoryBeanのインターフェースを実現していることを発見し,この時Spring容器はインターフェース方法CarFactoryBenメソッドを呼び出して戻る.CarFactoryBeanの例を取得したいなら、getBeanを使用する必要があります. 方法はbeanNameの前に表示されます.加えて を選択します プレフィックスは、例えばgetBean(\&car)である.
一般的には、Springは、反射機構によりbeanのclass属性指定実現類を利用して、beanを実現します. .場合によっては、例示化されたbeanプロセスは比較的複雑であり、従来の方法によれば、多くの構成情報を提供する必要があり、構成の柔軟性が制限されている場合、符号化方式を採用することによって簡単なスキームが得られるかもしれない.Springはこのためにorg.Sprigframe ebork.bean.factory.FactoryBenの工場類インターフェースを提供しており、ユーザーはこのインターフェースを実現することによって、実際的なbeanの論理をカスタマイズすることができる.
FactoryBeanインターフェースはSpringフレームにとって重要な位置を占めています. 自身70個以上のFactoryBeanを実現しました.それらは実用化のいくつかの複雑なbeanの詳細を隠しており、上層アプリケーションに便利をもたらしています.Springから 3.0 始まります FactoryBeanは汎型のサポートを開始しました.すなわち、インターフェース宣言はFactoryBean<T>に変更されました. の形式:
1 package org.Springframework.beans.factory;
2 public interface FactoryBean<T> {
3 T getObject() throws Exception;
4 Class<?> getObjectType();
5 boolean isSingleton();
6 }
このインターフェースでは、以下の3つの方法も定義されている.
T get Object():
FactoryBeanによって作成されたbeanの例を返し、isSingleton()がtrueに戻る場合、この例はSpring容器中の単一のインスタンスキャッシュ・プールに置かれる.
bollan isSingleton():
FactoryBeanによって作成されたbeanのインスタンスのスコープはsingletonですか?それともprototypeですか?
クラス
FactoryBeanで作成したbeanタイプを返します.
プロファイルの「bean」のclass属性構成の実装クラスがFactoryBeanである場合、 getBean()メソッドは、FactoryBean自体ではなく、FactoryBean(zhi get Object)メソッドによって返されるオブジェクトに相当し、FactoryBen(zhi getObject)がgetBen()メソッドを代理している.
例えば、次のカールの<bean>を従来の方式で構成する場合、Carの各属性はそれぞれ一つの<property>要素ラベルに対応します.
1 package org.Springframework.beans.factory;
2 public interface FactoryBean<T> {
3 T getObject() throws Exception;
4 Class<?> getObjectType();
5 boolean isSingleton();
6 }
FactoryBeanの方式で実現すれば柔軟になります.次の例は、カンマ区切りによって、一度にCarのすべての属性に設定値を指定します.
1 public class CarFactoryBean implements FactoryBean<Car> {
2 private String carInfo ;
3 public Car getObject () throws Exception {
4 Car car = new Car () ;
5 String [] infos = carInfo .split ( "," ) ;
6 car.setBrand ( infos [ 0 ]) ;
7 car.setMaxSpeed ( Integer. valueOf ( infos [ 1 ])) ;
8 car.setPrice ( Double. valueOf ( infos [ 2 ])) ;
9 return car;
10 }
11 public Class<Car> getObjectType () {
12 return Car. class ;
13 }
14 public boolean isSingleton () {
15 return false ;
16 }
17 public String getCarInfo () {
18 return this . carInfo ;
19 }
20
21 //
22 public void setCarInfo ( String carInfo ) {
23 this . carInfo = carInfo;
24 }
25 }
1 2 public class Car {
3 private int maxSpeed ;
4 private String brand ;
5 private double price ;
6 public int getMaxSpeed () {
7 return this . maxSpeed ;
8 }
9 public void setMaxSpeed ( int maxSpeed ) {
10 this . maxSpeed = maxSpeed;
11 }
12 public String getBrand () {
13 return this . brand ;
14 }
15 public void setBrand ( String brand ) {
16 this . brand = brand;
17 }
18 public double getPrice () {
19 return this . price ;
20 }
21 public void setPrice ( double price ) {
22 this . price = price;
23 }
24 }
このCarFactoryBeanがあれば、配置ファイルに次のようなカスタム構成を使用してCalを配置することができます. ビーンです
<bean id="car" class="com.test.factorybean.CarFactoryBean"carInfo=" ,400,2000000"/>
または<bean id="car" class="test.CarFactoryBean">
<property name="carInfo" value=" ,400,2000000"/>
</bean>
getBeanを呼び出したとき(「car」) 時,Springは反射機構によりCarFactoryBeanがFactoryBeanのインターフェースを実現していることを発見し,この時Spring容器はインターフェース方法CarFactoryBenメソッドを呼び出して戻る.CarFactoryBeanの例を取得したいなら、getBeanを使用する必要があります. 方法はbeanNameの前に表示されます.加えて を選択します プレフィックスは、例えばgetBean(\&car)である.