依存関係の注入と検索


依存関係とは?


2つのクラスまたはモジュールが依存している場合は、常に方向性を持つ必要があります.ここで、依存(依存関係)とは、依存オブジェクトが変化すると、依存クラスに影響を与えることを意味します.

ちゅうにゅう依存


依存関係注入とは、実行時に特定の依存オブジェクト(実際にオブジェクトオブジェクトオブジェクトを使用)と、それを使用するボディ(通常クライアントと呼ばれるオブジェクト)を接続する操作です.
注入依存関係は、次の条件を満たす必要があります.
  • クラスモデルまたはコードは、実行時点の依存関係を表示しません.そのため、インタフェースに依存しなければなりません.
  • 運転時点の依存関係は、容器や工場などの第三者の存在によって決定される.
  • 依存関係は、使用するオブジェクトのレポートを外部から注入することによって確立される.
  • 実行時点依存関係を決定する3番目のコンテナは,2つのオブジェクト間の依存関係注入を主導するとともに,オブジェクトの作成,初期化,提供などのタスクをIOC方式で実行するコンテナである.すなわち,依存関係の注入を担当する容器と見なすことができ,DI容器と呼ぶ.

    依存関係の検索


    Springが提供するIoC法は依存関係注入だけでなく依存関係探索もある.依存関係検索は,コード内で特定のクラスに依存せず,実行時に依存関係を決定する点で依存関係注入と似ているが,異なるのは,依存関係を確立する方法は外部から注入するのではなく,自分で検索を用いることである.依存関係検索では、必要な依存オブジェクトをアクティブに検索できます.実行時には、依存関係を確立するオブジェクトとオブジェクトの作成がIoCとして外部コンテナに渡されると判断しますが、インポート時には、コンストラクション関数やメソッドではなくコンテナに要求するメソッドが使用されます.
    public UserDao() {
    	DaoFactory daoFactory = new DaoFactory();
        this.connectionMaker = daoFactory.connectionMaker();
    }
    上記のソースコードでは、UserDaoは、自分がどのConnectionMakerオブジェクトを使用するかを事前に知らない.ConnectionMakerインタフェースに依存し、実行時にデータ・ファクトリから返されるオブジェクトと依存関係を確立します.しかし,注入依存関係とは異なり,IoC容器DaoFactoryに独自の手法を要求している.Application contextは、予め定められた名前を渡し、その名前に対応するオブジェクトを検索するので、検索と見なすことができます.ターゲットオブジェクトは実行時依存関係のオブジェクトであるため、依存関係検索と呼ばれます.さらに、アプリケーションコンテキストはSpringのIoCコンテナであり、依存関係を検索する方法getBean()を提供します.getBean()メソッドを使用して、依存関係検索でオブジェクトをインポートします.
    両者の重要な違いは、依存関係検索で検索されたオブジェクトがスプリング空席である必要がなく、依存関係注入では、両方のクラスがスプリングコンテナで作成された空のオブジェクトである必要があります.