Dagger 2学習ノート1

2236 ワード

ダガーって何?
DaggerはAndroidとJavaプラットフォームのために提供された完全な静的で、コンパイル時に依存注入を行うフレームワークで、もともとSquare社が維持していたが、現在はGoogleが維持している.
依存注入とは
依存注入といえば,別の語制御反転に言及する.Stack Overflowには、5歳の子供に依存注入をどのように説明するかという質問があります.その中で最も得点が高い答えは、自分で冷蔵庫に行って物を取ると、いくつかの問題を引き起こす可能性があります.冷蔵庫のドアを開けておくと、お母さんやお父さんが望んでいないものを取るかもしれません.冷蔵庫にないものや期限切れのものを探すかもしれません.あなたがしなければならないのは、「昼食には飲み物が必要です」と要求するだけで、座っている間に食べ物があることを確認します.
この原理は以下のように簡単にまとめられる.
  • 高レベルモジュールは、低レベルモジュールに依存するべきではなく、抽象に依存するべきである.
  • このような抽象は詳細に依存すべきではなく、詳細は抽象
  • に依存すべきである.
    依存逆転は、高レベルモジュールが低レベルモジュールとその詳細に依存する問題を解決します.Dependency injectionは、動作を依存から分離する技術であり、簡単に言えば、開発者は、これらの外部インタラクションのインスタンスをどのように取得するかを符号化することなく、外部の他の様々なインタラクションに依存する方法関数を定義することができる.これにより、様々なコンポーネント間でデカップリングされ、依存するハードコーディングに比べて、1つのコンポーネントが実行時にのみ必要な他のコンポーネントを呼び出すため、コード実行時に特定のフレームワークまたはコンテナを介して必要な他の依存コンポーネントを注入し、アクティブに押し込むクリーンなコードが得られる.依存注入は反転制御inversion of controlの特例と見なすことができる.反転は依存であり、他のものではなく、JNDIも反転制御であり、JNDI名またはリソースを反転します.参考:「Inversion of Control Containers and the Dependency Injection pattern」.依存注入はSpringやpiconcontainerなどが最初に提案したもので、現在ではデフォルトの主流モードであり、Angular.のようなフロントエンドに拡張されている.js.本テーマは国内で最も早くIOCと依存注入の討論テーマである.依存注入はIOCモデルと類似したファクトリモデルであり,呼び出し者と被呼び出し者の依存結合関係を解決するモデルであり,2004年の誕生以来,現在ではJavaや他の分野の主流モデルとなっている.オブジェクト間の依存関係を解決し、オブジェクトがIOC/DIコンテナのみに依存するようになり、直接相互に依存しなくなり、緩い結合を実現した後、オブジェクト作成時にIOC/DIコンテナによって依存するオブジェクトがInjectの体内に注入されるので、依存注入依存射出モードとも呼ばれ、緩い結合を最大限に実現し、特にAutowiring/Autowired自動ペアリング導入を実現し、Javaのゴミ回収メカニズムを再結合し、Javaにおいて、オブジェクトは、開発者が自分で作成する必要がなくなり、開発者が自分で破棄する必要がなくなり、直接使用するだけで開発効率が大幅に向上します.依存注入ははっきり言って、容器があるクラスに依存する他のクラスをこのクラスに注入することです.では、依存とは何ですか.以下のコードはA依存Bを表している.Adの方法行為mymehtodには一部B依存の方法mが実現されているため、子供がいくつかの行為を親に依存して完成させるように、親はよく子供が何をしなければならないかの時に、主にそれを助けて、彼の必要な結果を直接彼に与える.これも依存注入である(これまで、子供の独立性が失われる).
    public class A{
      private B b;
      public A(B b){
        this.b = b;
      }  
          public void myMethod(){
        b.m();  
        }
    }
    

    通常、我々は、Aを使用する際に、BのインスタンスをAに付与する必要がある.  A a = new A(new B());   a. mymethod(); 一方、注入容器またはフレームに依存することによって、A対Bの依存はコードを書くときに与える必要はなく、工場または容器からAのインスタンスを取得する限り、この工場または容器は注入フレームに依存して提供され、BのインスタンスはこっそりAに注入される:A a=factory.getA();   a. myMethod(); これにより、クライアントがコードを呼び出すのはAと結合するだけで、Aのコードを開いて、その内部と他のクラスが依存結合しているかを観察し、これらの依存インスタンスを手動で注入する必要はありません.
    -----続きます