微風から移動クリスタルカーテンは、フルフレームは、病院の香上昇しました。
アウトライン
ソフトウェア工学では、制御の反転(IoC
)が設計され、実行時に自動的にバインドされ、彼らはオブジェクトを参照する必要があり、コンパイル時間が不確実である、オブジェクト間で互いに結合されました。このようにspring
チュートリアル、例として理解しioc
、およびspring
依存性注入との間の差。
制御の反転(IOC)は何ですか
伝統的なオブジェクト指向ソフトウェア設計において、の底部は、様々なオブジェクト間の相互協力を通じて、オブジェクトのN個の複数で構成されています。そして、最終的にビジネスプロセス。制御の反転がコンテナに作成し、コントロールの依存オブジェクトを探すために意図され、複合オブジェクトは、また、より重要なのは、機能を多重化するのに役立ちますこれ、テストを容易と思われるので、オブジェクトとオブジェクト間の疎結合され、コンテナによって注入されます一部の人々は、サービスロケータパターンの使用も制御の反転を提供できると思いますが、システム全体のプログラムの非常に柔軟な構造を作ります。
設計基準として制御の反転を使用するには、次のような利点があります。
- タスクと実装を行って分離されています
- 各モジュールは、独自のデザインで、より懸念しています。
- モジュールは、あなたが唯一頼ることができ、他のシステムを見てする必要はありません。
- アップグレードモジュールが他のモジュールに影響を与えません。
依存性注入は何である(DI)
IoC
目標は、これらのコンポーネントを行うことができるように、アプリケーションのさまざまなコンポーネントをより細かく制御を提供することで、設計パラダイムです。依存性注入は、コンパイル時に、オブジェクト依存のオブジェクトのインスタンスを作成するためのパターンであり、知覚されません。IoC
それはあなたが必要なコンポーネントを作成し、参照するためのメカニズムを必要とするためには、依存性注入によって異なります。
これら二つの概念は、より柔軟な、再利用可能なコードの製造を可能にする、このように動作協調、およびパッケージ。従って、それらは、概念設計のための重要なオブジェクト指向のソリューションです。
IoCを達成する方法
オブジェクト指向プログラミングでは、いくつかの基本的な技術は、反転を制御するために実装することができるあります。次のとおりです。
- 工場出荷時のパターンを使用して
- サービスロケータパターンを使用します
- 依存性注入、次のタイプのいずれかを考えます
- コンストラクタ・インジェクション
- セッター・インジェクション
- ノート注射
春の反転制御
org.springframework.beans
そして、org.springframework.context
のパッケージSpring
のフレームワークはIoC
、コンテナの基本的な機能を提供します。BeanFactory
インターフェイスは、より高度な設定オプション、すべてのオブジェクトを管理する機能を提供します。ApplicationContext
上に構築されたインターフェイスBeanFactory
ようと同様に上部(サブインターフェースである)、及び追加の他の特徴、(国際化のために)容易に統合機能、メッセージ・リソース・ハンドリング、イベント伝播コンテキストおよびアプリケーション固有層、例えば、使用するアプリケーションSpring
AOP
Web
WebApplicationContext
BeanFactory
それはSpring IoC
、コンテナの主な成果、および上記の責任ある管理を含んでいますBean
。BeanFactory
インタフェースはあるSpring
で重要なIoC
コンテナインターフェイス。
BeanFactory
インターフェイスは、多くの実装があります。最も一般的なBeanFactory
実装があるXmlBeanFactory
クラス。その他の人気クラスですXmlWebApplicationContext
。よるbean
定義、植物は、異なるインスタンス(に含まれるオブジェクトを返すであろうPrototype
デザインモード)、または単一の共有インスタンス(戻りSingleton
デザインモード、実施形態の範囲の前記単一インスタンス)。ファクトリー)。リターンに依存するタイプの例としてbean
、植物の構成:取得bean
インスタンスがAPI
同じです。
依存性注入タイプ掘り下げる前に、最初の決定spring
の枠組み作成しbean
、それは次のセクションを理解するのに役立ちますので、道を。
春Beanインスタンスを作成する方法
Bean
定義には、一つ以上の実際の構成を作成することを目的として見ることができます。、という名前のコンテナルックスの取得bean
設定をし、使用しbean
、実際のオブジェクトを作成する(または取得)するには、設定項目の定義パッケージを。
コンストラクタを使用して
あなたはコンストラクタメソッドを使用して作成するとbean
、すべての普通のクラスは、することができSpring
、使用と互換性があります。言い換えれば、あなたは、クラスを作成している任意の特定のインタフェースを実装する必要はありませんか、特定の方法でエンコードされました。唯一の指定されたbean
クラスは十分です。ベースXML
構成要素、等指定することができるbean
クラス:
<bean id="exampleBean" class = "cn.howtodoinjava.ExampleBean"/>
静的ファクトリメソッドを使用して
定義staticファクトリメソッドを使用して作成するbean
と、そのクラスのstaticファクトリメソッドが含ま指定するclass
属性を、別の名前の必要なfactory-method
プロパティをファクトリメソッド自体の名前を指定します。
<bean id="exampleBean" class = "cn.howtodoinjava.ExampleBean" factory-method="createInstance"/>
Spring
このメソッドを呼び出して、利用可能なオブジェクトを返すことができるようにしたい、オブジェクトを取得した後、オブジェクトはコンストラクタによって作成されたものとみなされます。
例ファクトリメソッド
方法で既存のコンテナをインスタンス化するインスタンスファクトリメソッドを使用して、静的なファクトリメソッドを介し方法の同様の例としては、呼び出して新たに作成する方法。bean
factory
bean
<bean id="myFactoryBean" class="cn.howtodoinjava.MyFactoryBean">
<bean id="exampleBean" factory-bean="myFactoryBean" factory-method="createInstance"></bean>
Springの依存性注入
依存性注入(DI
)この背後にある基本原理は、オブジェクトのみがコンストラクタ引数、パラメータを介して、それらの依存関係を定義していることである又はファクトリメソッドは、これらのパラメータが設定またはオブジェクトインスタンスのオブジェクト・インスタンス上に配置されたファクトリメソッドの戻りかられる属性A。Beanを作成するときに、作業が実際にこれらの依存性の容器に注入されます。すなわち、によってIoC
助け対応するコンテナオブジェクトと依存オブジェクト注入を見つけ、積極的に(、オブジェクトに対する制御のいわゆる反転を見ていませんIoC
)。
セッター・インジェクション
インスタンス化パラメータなしコンストラクタまたは静的ファクトリメソッドを呼び出すことはパラメータbean
その後、bean
呼び出しsetter
方法は、に基づいて実施することはできません。setter
DI
public class TestSetterDI {
DemoBean demoBean = null;
public void setDemoBean(DemoBean demoBean) {
this.demoBean = demoBean;
}
}
コンストラクタ・インジェクション
ベースコンストラクタDI
コールパラメータ(各オブジェクトのインスタンスを表す)を複数有するコンストラクタを達成します。また、特定のパラメータを持つ静的なファクトリメソッドを呼び出すことに構築されたBean
記事の残りの部分とほぼ同等で、同様のパラメータと静的ファクトリメソッドコンストラクタを考慮されます。
public class ConstructorDI {
DemoBean demoBean = null;
public TestSetterDI (DemoBean demoBean) {
this.demoBean = demoBean;
}
}
ノート注射
メモはのみにメンバ変数を追加する必要が注射さ@Autowire
にメモ
public class ConstructorDI {
@Autowire
private DemoBean demoBean;
}
}
春の顔の質問
コンポーネントとサービスの違いは何ですか?
ソフトウェアコンポーネントのセットがあり、これらのコンポーネントは、他のアプリケーションで使用され、任意の変更をすることはありません。これらはコンポーネントの作者許容挙動によって部品の膨張の成分を変化させることができるものの、いわゆる「変化」は、ソース・コード・コンポーネントを変更しないアプリケーションの使用を意味しません。
外部アプリケーションのための同様のサービスおよびコンポーネント。主な違いは、(例えば、ローカルの使用などの構成要素ということであるjar
ファイル、アセンブリ、dll
またはソースを導入します)。リモート同期または非同期インターフェイス(例えば、スルーサービスWeb
サービス、メッセージングシステム、RPC
リモートまたはソケット)。
DIおよびサービスロケータパターンの違いは何ですか?
主な利点依存性注入デバイスは、それが適切なサービスの注入は、環境や使用状況を達成することを可能にするということです。注入は別の方法は、サービスロケータを使用することで、この依存関係を壊すための唯一の方法ではありません。基本的な考え方は、すべてのサービスアプリケーションが必要とすることができる持っている方法を知っているロケータオブジェクトのサービスを持つことです。次に、それは、これらのサービスのすべてをスキャンし、レジストリの一つのケースとしてそれらを格納します。サービスの実装を提供するように求められたら、要求者は、レジストリを照会し、適切な実施のためのトークンを使用することができます。
一般的に、これらのレジストリは、いくつかの設定ファイルによって移入されます。主な違いは、各ユーザーおよびサービスについて、ロケータサービスを使用している場合は、保持器に依存している、ということです。ロケータは、他の実装に依存関係を隠し、まだロケータを確認する必要がありますすることができます。
サービス(サービスロケータや依存性注入)を使用することをお勧めどれですか?
既に述べたように、重要な違いは、ロケータサービスの利用には、各ユーザーがサービスロケータへの依存性を持っているということです。あなたが入力と出力の面でサービスロケータについての詳細を学ぶ必要があることをこの意味。だから、実際には、選択されたモードを決定する要因となります。
メンテナンスが簡単で、必要なレジストリ情報がある場合は、そのサービスの利用者が意識していませんので、あなたは、依存性注入を使用して直接サービスロケータを使用するか、またはすることができます
より良いコンストラクタ・インジェクションやセッターインジェクションやコメントはどれですか?
基づいてconstructor
、注射、注射の固定順序に依存します。このように私たちが作成することはできませんbean
オブジェクト間の循環依存関係を、そのような制限は、実際に注入するコンストラクタを利用メリット-あなたも使用気付かなかったときsetter
の噴射時間を、Spring
円形の依存関係の問題を解決します。
ベースのsetter
注入は、対象物を注射する場合にのみ、それは注入依存関係に私たちを助けるだけではなく、初期化時に注入されます。一方で、あなたがに基づいて使用している場合はconstructor
、注射、CGLIB
プロキシ力を作成することはできませんあなたのベースのインターフェースエージェントまたは仮想引数なしのコンストラクタ。
私の好みはノートを注入され、このアプローチのルックスは非常に良い、細かい短い、高い可読性、余分なコードを、簡単に維持するために。
たBeanFactoryとは何ですか?
BeanFactory
シリーズが含まれているファクトリクラスと同様にbean
。BeanFactory
複数のその内部に保存されているBean
のBean
クライアントの要件で定義され、インスタンス化はBean
。
BeanFactory
あなたは、コラボレーション・オブジェクトのインスタンス間の関連付けを作成することができます。これは排除bean
自身とbean
クライアントの設定の負担を。BeanFactory
また、に関与しbean
たカスタムの初期化と破壊のメソッドを呼び出すように、ライフサイクル。
ApplicationContextとは何ですか?
Bean
活用するために、単純なアプリケーションのための工場が、Spring
フレームワークのすべての機能、あなたはにアップグレードする必要があるかもしれないSpring
アプリケーションコンテキストで、より高度なコンテナ。表面上で、アプリケーションコンテキストBean
同じ工場、ロードされた両方のBean
定義、Bean
一緒に結合し、要求に応じて割り当てられましたBean
。しかし、それはまた、以下の機能を提供します。
- 国際化のためのサポートを含む溶液のテキストメッセージ、。
- ファイルリソースをロードするための一般的な方法。
- 以下のために
bean
イベントリスナーを登録。
ApplicationContextのは何の共通の実装?
ApplicationContext
3つの一般的な実装は次のとおりです。
ClassPathXmlApplicationContext
:これはクラスパスからに位置しておりXML
、負荷コンテキスト定義ファイル、およびコンテキストの定義は、クラスパスリソースに検討しました。アプリケーションのクラスパスからのアプリケーションコンテキストをロードするためのコードを使用しました。ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
FileSystemXmlApplicationContext
:それのファイルシステムからXML
ロードされたコンテキスト定義ファイル。ファイルシステムからアプリケーション・コンテキストをロードするためのコードを使用しました。
ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");
XmlWebApplicationContext
:それはあるWeb
コンテキスト定義にロードされたアプリケーションが含まれているXMLファイル。
たBeanFactoryやApplicationContextのは、何を使用するのが最適でしょうか?
BeanFactory
基本的にはちょうどインスタンス化され、構成Bean
。ApplicationContext
また、これを行うことができ、そのような取引など、多くの企業固有の機能をサポートするためのサポートインフラストラクチャを提供してAOP
。
そのため、使用することをお勧めしますApplicationContext
。
このチュートリアルでは、我々はspring
学んだioc
とdi
の違い。
マイクロチャンネル公衆番号へ???注意Javaの乾燥
時間から乾燥を共有する時間情報へ
オリジナルリンク:春-のIoCコンテナ