IOC & Container

5852 ワード

国際制御委員会(Inversion of Control、制御に逆行)


国際オリンピック委員会の概要


「ランタイム」では、
  • オブジェクト言語のオブジェクト間の接続関係を決定します.
    新しいオブジェクトXを直接接続する
  • オブジェクト間の関係緩和結合
    ゆったりした
  • IOCの実現方法の一つは依存注入(DI)
    DL->接続プール、必要に応じて
  • を検索

    IOCタイプ



  • Dependency Lookup
    コンテナは、コンテキストを検索することによって必要なリソースまたはオブジェクトを取得します.
    関連コードの作成、フォーマットの変換、エクスポートが必要です

  • Dependency Injection
    コンテナを指定すると、オブジェクトに直接依存構造(xml、annotation)を設定できます.
    オブジェクトは、コンテナが存在するかどうかを知る必要はありません.Lookup関連コードは不要です.
  • Container


    オブジェクトの作成、使用、破棄のライフサイクルを担当します.
    機能:ライフサイクルの管理、依存オブジェクトの提供
    ファクトリ・モードまたはシングル・ポイント・モードを直接実装することなく、サービス・オブジェクトを使用できます.

    IOC Container


    オブジェクトの作成、リレーションシップの確立、使用、削除は、コードではなく独立したコンテナによって担当されます.
    オブジェクトに対する制御権を持つ
    スプリング容器=IOC容器
    SpringのIOC担当コンテナには、BeanFactory、ApplicationContextが含まれています.
    BeanFactory:オブジェクトを作成するファクトリ
    Application Context:BFサブクラス、管理アプリケーションのコンテキスト、メモリ領域

    Spring DI Container


    Spring DI Containerが管理するオブジェクトをbeanと呼び、BeanFactoryと呼ばれるbeanのライフサイクルを管理します.
    BeanFactoryには、ApplicationContextと呼ばれる複数のコンテナ機能が追加されています.

    通常、ApplicationContextを使用します.

    国際オリンピック委員会の概念

  • オブジェクト制御
    既存:開発者に必要なオブジェクト作成ロジックの実装
    IOC:Container処理
  • へのオブジェクト作成の委任
  • の利点
    オブジェクト間の結合度(松結合)
  • を低減することができる.
    カスケード
    1.クラス呼び出し方式:オブジェクトからオブジェクトへの強い結合、変更不可
    2.インタフェース呼び出し方式:多形性により結合度を下げ、インタフェース交換時に呼び出しクラスを修正する
    3.工場呼び出し:工場によって結合度を下げ、工場に依存する
    4.IoCコール方式:工場の優位性に依存しない.実行時にクラス間の関係を確立する

    コード#コード#


    ApplicationContextオブジェクトが必要です.
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
      
    <bean id = "kor" class = "com.ssafy.hello.di4.HelloMessageKor">
    
    </beans>
    xml設定
    public class HelloMain {
    
    	public static void main(String[] args) {
    		ApplicationContext context = new ClassPathXmlApplicationContext("xml위치");
        	//객체 생성
    		HelloMessage helloMessage = context.getBean("kor", HelloMessageKor.class);
            //이름, 클래스
    	}
    }