チュートリアルの春シリーズ
- 春のフレームワークの紹介
- 春のフレームワークモジュール
- 春の開発環境を構築する(エクリプス)
- シンプルなSpringアプリケーションを作成します。
- コントロールのコンテナの春反転(制御の反転 - IOC)
- おくる依存性注入(DI - 依存性注入)
- 豆のXML構成は(1) - XMLの設定によってBeanのロード
- 豆XMLコンフィギュレーション(2) - 豆の範囲およびライフサイクル・コールバック・メソッドの構成
- 豆のXML構成(3) - コンフィギュレーションの依存性注入
- 豆のXML設定(4) - 自動組立
- 豆の注釈(アノテーション)の設定(1) - アノテーションによってBeanのロード
- 豆アノテーション(注釈)の構成(2) - 豆の範囲およびライフサイクル・コールバック・メソッドの構成
- 豆アノテーション(注釈)の構成(3) - コンフィギュレーション依存性注入
- ビーンJavaの設定
- 春のアスペクト指向プログラミング(AOP)
- 春のイベント(1) - 内蔵のイベント
- 春のイベント(2) - カスタムイベント
この記事では、XMLを使用ビーン間の依存関係を設定する方法について説明します。
ビーンの定義のXML構成ファイルは、Beanに依存して設定することができ、コンフィギュレーションは、一般に、2つの種類を使用しました:
- コンストラクタ・インジェクション
- セッターメソッド・インジェクション
コンストラクタ・インジェクション
XML構成は、春のBeanインスタンスは、まず、コンテナは異なり作成クラスのコンストラクタに渡されました。
例:
public class App {
private Service mainService;
private Service[] services;
// 注入Service实例
public App(Service main){
this.mainService = main;
}
// 注入Service实例数组
public App(Service[] services){
this.services = services;
}
}
bean.xmlでは、アプリケーションのクラスの依存関係を定義します。
<!-- App Bean定义 -->
<bean id="app" class="App">
<!-- 构造函数注入单个依赖项实例 -->
<constructor-arg ref="logger"/>
<!-- 构造函数注入依赖项实例数组 -->
<!-- <constructor-arg>
<list>
<ref bean="database"/>
<ref bean="mail"/>
<ref bean="logger"/>
</list>
</constructor-arg> -->
</bean>
<!-- Service bean (依赖项)定义 -->
<bean id="database" class="Database"/>
<bean id="logger" class="Logger"/>
<bean id="mail" class="Mail"/>
Database
、Logger
、Mail
Chengzi智クラス以下の通りですService
。
<constructor-arg>
噴射形態ビーンのコンストラクタは、ref
ビーン(参照)に移植することが指定された属性、属性値は、BeanのIDに依存しています。
一つのXMLビーン定義
<constructor-arg>
ので、上記の例の注射または単一のサービス・インスタンス、サービスインスタンスまたは注入の配列です。すべての依存関係のコンフィグレーションBeanのためのXMLファイル、またはSpringコンテナは、これらの依存関係を注入することができないことを確認してください。
セッターメソッド・インジェクション
XML構成、セッタークラスメソッドは、コンテナ春の依存性注入を呼び出します。
例:
public class App {
// ...
public Service getMainService() {
return mainService;
}
// 通过setter方法注入服务实例
public void setMainService(Service mainService) {
this.mainService = mainService;
}
public Service[] getServices() {
return services;
}
// 通过setter方法注入服务实例数组
public void setServices(Service[] services) {
this.services = services;
}
}
bean.xmlで、依存関係のクラス定義。Springコンテナ<property>
対応する構成セッターメソッド、プロパティを設定し、クラスを呼び出す、依存性注入を達成します。
<bean id="app" class="App">
<!-- Setter 方法配置 -->
<property name="mainService" ref="logger"/>
<property name="services">
<list>
<ref bean="database"/>
<ref bean="mail"/>
<ref bean="logger"/>
</list>
</property>
</bean>
Springコンテナセッターメソッドは、setterメソッドを呼び出し名に従ってSpringコンテナと呼ばれているかを知る方法:?名がキーワードの後にプロパティ名を「設定」に対応し、name="mainService"
に対応setMainService
。
インジェクション設定値
私たちは、フロントの使用説明<constructor-arg>
と<property>
Beanインスタンスの注入に依存し、彼らはまた、値を注入するために使用することができます。
例:
<bean id="app" class="App">
<!-- 构造函数注入值 -->
<constructor-arg type="int" value="12345"/>
<constructor-arg type="java.lang.String" value="myApp"/>
<!-- 也可通过构造函数的参数序号注入值 -->
<!-- <constructor-arg index="0" value="12345"/> -->
<!-- <constructor-arg index="1" value="myApp"/> -->
<!-- Setter方法注入值 -->
<!-- <property name="id" value="1234"/> -->
<!-- <property name="name" value="myApp"/> -->
</bean>
XML value
Beanへの参照は、次に使用する場合は値が、プロパティのクラス属性に割り当てられているref
プロパティ。
次のようにヌルまたは空の文字列値を渡す必要が設定されてもよい場合。
<bean id="app" class="App">
<property name="name" value=""/>
</bean>
<bean id="app" class="App">
<property name="name"><null/></property>
</bean>