美文网首页
Dagger2学习笔记

Dagger2学习笔记

作者: Beck766 | 来源:发表于2017-09-27 15:45 被阅读0次

引入Dagger2

  • 配置apt插件(在build.gradle(Project:xxx)中添加如下代码)
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  • 添加依赖(在build.gradle(Module:app)中添加如下代码)
//添加如下代码,应用apt插件 
apply plugin: 'com.neenbedankt.android-apt' 
... 
dependencies { 
... 
compile 'com.google.dagger:dagger:2.4' 
apt 'com.google.dagger:dagger-compiler:2.4' 
//java注解 
compile 'org.glassfish:javax.annotation:10.0-b28'
 ... 
}

使用Dagger2

在mvp中,最常见的一种依赖关系,就是Activity持有presenter的引用,并在Activity中实例化这个presenter,即Activity依赖presenter,presenter又需要依赖View接口,从而更新UI。
用依赖注入的方式写,代码如下:

    public class MainActivity extends AppCompatActivity implements MainContract.View {
        @Inject
        MainPresenter mainPresenter; 
        ...

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            DaggerMainComponent.builder()
          .mainModule(new MainModule(this))
          .build()
          .inject(this); //调用Presenter方法加载数据          

          mainPresenter.loadData(); 
          ... 
        } 
    }
         public class MainPresenter {
        //MainContract是个接口,View是他的内部接口,这里看做View接口即可
        private MainContract.View mView;

        @Inject
        MainPresenter(MainContract.View view) {
            mView = view;
        }

        public void loadData() {
            //调用model层方法,加载数据 
            //... 
            // 回调方法成功时
            mView.updateUI();
        }

        @Module
        public class MainModule {
            private final MainContract.View mView;

            public MainModule(MainContract.View view) {
                mView = view;
            }

            @Provides
            MainView provideMainView() {
                return mView;
            }
        }

        @Component(modules = MainModule.class)
        public interface MainComponent {
            void inject(MainActivity activity);
        }

我们先看MainActivity里的代码,之前是直接声明MainPresenter,现在在声明的基础上加了一个注解@Inject,表明MainPresenter是需要注入到MainActivity中,即MainActivity依赖于MainPresenter,这里要注意的是,使用@Inject时,不能用private修饰符修饰类的成员属性。

然后我们在MainPresenter的构造函数上同样加了@Inject注解。这样MainActivity里的mainPresenter与他的构造函数建立了某种联系。这种联系我们可以这样理解,当看到某个类被@Inject标记时,就会到他的构造方法中,如果这个构造方法也被@Inject标记的话,就会自动初始化这个类,从而完成依赖注入。

然后,他们之间并不会凭空建立起联系,因此我们想到,肯定需要一个桥梁,将他们连接起来,也就是下面要介绍的Component。

相关文章

  • Dagger2学习笔记5(关于Lazy,Provide的使用)

    Dagger2学习笔记1(基础概念学习)Dagger2学习笔记2(学习Dagger2的简单使用)Dagger2学习...

  • Dagger2学习笔记4(@Singleton 与@ Scope

    Dagger2学习笔记1(基础概念学习)Dagger2学习笔记2(学习Dagger2的简单使用)Dagger2学习...

  • Dagger2学习笔记3(各个注解学习)

    Dagger2学习笔记1(基础概念学习)Dagger2学习笔记2(学习Dagger2的简单使用)上篇中学习了如何使...

  • Dagger2学习笔记(二)

    系列文章:Dagger2学习笔记(一)Dagger2学习笔记(二) 在上一篇文章我们讲了用于搜索的SearchAc...

  • Dagger2学习笔记(一)

    系列文章:Dagger2学习笔记(一)Dagger2学习笔记(二) 依赖注入是一种十分好的技巧,它能解偶高层次模块...

  • Dagger2 框架与 SystemUI

    学习笔记:Dagger源码[https://github.com/google/dagger] Dagger2 注...

  • Dagger链接

    [Dagger2学习笔记] (https://blog.csdn.net/sweet_smile5/article...

  • Dagger2学习笔记

    声明:第一次做笔记,仅做自己学习后总结记录,如有侵权请及时联系我删除. 笔记只作用法记录,不涉及原理,如果有人看过...

  • Dagger2学习笔记

    学习资料: Dagger2概念详细讲解 一共3篇文章,以形象的例子和清晰的思路,讲清楚了下面三个问题,建议看下面的...

  • Dagger2学习笔记

    前言 项目开撸阶段,准备接入Dagger2,再重新学起来!这篇文章主要是记录对dagger2的学习,从基本使用,到...

网友评论

      本文标题:Dagger2学习笔记

      本文链接:https://www.haomeiwen.com/subject/miqalxtx.html