春のシリーズ3:IoCのとDI

微風から移動クリスタルカーテンは、フルフレームは、病院の香上昇しました。
ここに画像を挿入説明

アウトライン

ソフトウェア工学では、制御の反転(IoC)が設計され、実行時に自動的にバインドされ、彼らはオブジェクトを参照する必要があり、コンパイル時間が不確実である、オブジェクト間で互いに結合されました。このようにspringチュートリアル、例として理解しioc、およびspring依存性注入との間の差。

制御の反転(IOC)は何ですか

伝統的なオブジェクト指向ソフトウェア設計において、の底部は、様々なオブジェクト間の相互協力を通じて、オブジェクトのN個の複数で構成されています。そして、最終的にビジネスプロセス。制御の反転がコンテナに作成し、コントロールの依存オブジェクトを探すために意図され、複合オブジェクトは、また、より重要なのは、機能を多重化するのに役立ちますこれ、テストを容易と思われるので、オブジェクトとオブジェクト間の疎結合され、コンテナによって注入されます一部の人々は、サービスロケータパターンの使用も制御の反転を提供できると思いますが、システム全体のプログラムの非常に柔軟な構造を作ります。

設計基準として制御の反転を使用するには、次のような利点があります。

  1. タスクと実装を行って分離されています
  2. 各モジュールは、独自のデザインで、より懸念しています。
  3. モジュールは、あなたが唯一頼ることができ、他のシステムを見てする必要はありません。
  4. アップグレードモジュールが他のモジュールに影響を与えません。

依存性注入は何である(DI)

IoC目標は、これらのコンポーネントを行うことができるように、アプリケーションのさまざまなコンポーネントをより細かく制御を提供することで、設計パラダイムです。依存性注入は、コンパイル時に、オブジェクト依存のオブジェクトのインスタンスを作成するためのパターンであり、知覚されません。IoCそれはあなたが必要なコンポーネントを作成し、参照するためのメカニズムを必要とするためには、依存性注入によって異なります。

これら二つの概念は、より柔軟な、再利用可能なコードの製造を可能にする、このように動作協調、およびパッケージ。従って、それらは、概念設計のための重要なオブジェクト指向のソリューションです。

IoCを達成する方法

オブジェクト指向プログラミングでは、いくつかの基本的な技術は、反転を制御するために実装することができるあります。次のとおりです。

  1. 工場出荷時のパターンを使用して
  2. サービスロケータパターンを使用します
  3. 依存性注入、次のタイプのいずれかを考えます
  • コンストラクタ・インジェクション
  • セッター・インジェクション
  • ノート注射

春の反転制御

org.springframework.beansそして、org.springframework.contextのパッケージSpringのフレームワークはIoC、コンテナの基本的な機能を提供します。BeanFactoryインターフェイスは、より高度な設定オプション、すべてのオブジェクトを管理する機能を提供します。ApplicationContext上に構築されたインターフェイスBeanFactoryようと同様に上部(サブインターフェースである)、及び追加の他の特徴、(国際化のために)容易に統合機能、メッセージ・リソース・ハンドリング、イベント伝播コンテキストおよびアプリケーション固有層、例えば、使用するアプリケーションSpringAOPWebWebApplicationContext

BeanFactoryそれはSpring IoC、コンテナの主な成果、および上記の責任ある管理を含んでいますBeanBeanFactoryインタフェースはある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このメソッドを呼び出して、利用可能なオブジェクトを返すことができるようにしたい、オブジェクトを取得した後、オブジェクトはコンストラクタによって作成されたものとみなされます。

例ファクトリメソッド

方法で既存のコンテナをインスタンス化するインスタンスファクトリメソッドを使用して、静的なファクトリメソッドを介し方法の同様の例としては、呼び出して新たに作成する方法beanfactorybean

<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方法は、に基づいて実施することはできませんsetterDI

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シリーズが含まれているファクトリクラスと同様にbeanBeanFactory複数のその内部に保存されているBeanBeanクライアントの要件で定義され、インスタンス化はBean

BeanFactoryあなたは、コラボレーション・オブジェクトのインスタンス間の関連付けを作成することができます。これは排除bean自身とbeanクライアントの設定の負担を。BeanFactoryまた、に関与しbeanたカスタムの初期化と破壊のメソッドを呼び出すように、ライフサイクル。

ApplicationContextとは何ですか?

Bean活用するために、単純なアプリケーションのための工場が、Springフレームワークのすべての機能、あなたはにアップグレードする必要があるかもしれないSpringアプリケーションコンテキストで、より高度なコンテナ。表面上で、アプリケーションコンテキストBean同じ工場、ロードされた両方のBean定義、Bean一緒に結合し、要求に応じて割り当てられましたBeanしかし、それはまた、以下の機能を提供します。

  • 国際化のためのサポートを含む溶液のテキストメッセージ、。
  • ファイルリソースをロードするための一般的な方法。
  • 以下のためにbeanイベントリスナーを登録。

ApplicationContextのは何の共通の実装?

ApplicationContext3つの一般的な実装は次のとおりです。

  1. ClassPathXmlApplicationContext:これはクラスパスからに位置しておりXML、負荷コンテキスト定義ファイル、およびコンテキストの定義は、クラスパスリソースに検討しました。アプリケーションのクラスパスからのアプリケーションコンテキストをロードするためのコードを使用しました。
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    
    
  2. FileSystemXmlApplicationContext:それのファイルシステムからXMLロードされたコンテキスト定義ファイル。ファイルシステムからアプリケーション・コンテキストをロードするためのコードを使用しました。
ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");
  1. XmlWebApplicationContext:それはあるWebコンテキスト定義にロードされたアプリケーションが含まれているXMLファイル。

たBeanFactoryやApplicationContextのは、何を使用するのが最適でしょうか?

BeanFactory基本的にはちょうどインスタンス化され、構成BeanApplicationContextまた、これを行うことができ、そのような取引など、多くの企業固有の機能をサポートするためのサポートインフラストラクチャを提供してAOP

そのため、使用することをお勧めしますApplicationContext

このチュートリアルでは、我々はspring学んだiocdiの違い。


ここに画像を挿入説明

マイクロチャンネル公衆番号へ???注意Javaの乾燥
時間から乾燥を共有する時間情報へ

オリジナルリンク:春-のIoCコンテナ

公開された112元の記事 ウォン称賛90 ビュー35万+

おすすめ

転載: blog.csdn.net/dandandeshangni/article/details/102626988