美文网首页AndroidAndroidDagger2
Dagger2入门(二)—— Dagger2的简单使用

Dagger2入门(二)—— Dagger2的简单使用

作者: Charles1993 | 来源:发表于2019-12-10 23:58 被阅读0次

    目录

    Dagger2入门(一)—— Dagger2优点
    Dagger2入门(二)—— Dagger2的简单使用
    Dagger2入门(三)—— Dagger2的高级用法

    环境搭建

    Dagger2环境搭建新的Gradle版本上搭建要比原先简单的多。只需要在module目录下的build.gradle文件中添加依赖

    dependencies {
        ...
    
        implementation 'com.google.dagger:dagger-android:2.X'
        implementation 'com.google.dagger:dagger-android-support:2.X'
        annotationProcessor 'com.google.dagger:dagger-compiler:2.X'
    }
    

    即可。
    注意,有些教程上教的是一些比较旧的方法:
    在project目录下的build.gradle文件中添加

      dependencies {
          ...
          classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
      }
    

    在module目录下的build.gradle文件中添加

    apply plugin: 'com.android.application'
    apply plugin: 'com.neenbedankt.android-apt'
    dependencies {
        //引入Dagger2以及依赖的一些包,因为用到注释所以还需要引用annotation包
        apt 'com.google.dagger:dagger-compiler:2.0'
        compile 'com.google.dagger:dagger:2.0'
        compile 'javax.inject:javax.inject:1'
        compile 'javax.annotation:javax.annotation-api:1.2'
    }
    

    在新的Gradle环境下会报出编译时错误:

    ERROR: android-apt plugin is incompatible with the Android Gradle plugin.  Please use 'annotationProcessor' configuration instead.
    Affected Modules: app
    

    大意是说android-apt以及被包含在Android的工程里了,需要用新的使用方法。

    代码实现

    1. 实现需要被注入的类(Demo)和被注入的类(MainActivity)
    public class Demo {
        public void work() {
            Log.i("schLog", "Dagger2 正常工作");
        }
    }
    public class MainActivity extends AppCompatActivity {
        @Inject
        Demo demo;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            demo.work();
        }
    }
    
    1. 实现Module和Component
    @Module
    public class MainActivityModule {
        @Provides
        public Demo provideWatch() {
            return new Demo();
        }
    }
    @Component(modules = MainActivityModule.class)
    public interface MainActivityComponent {
        void inject(Activity activity);
    }
    
    1. 按一下Ctrl和F9键(Make Project)或者点击Rebuild Project生成Dagger2工厂文件,然后将依赖注入到需要注入的地方。
    public class MainActivity extends AppCompatActivity {
        @Inject
        Demo demo;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //将依赖注入
            DaggerMainActivityComponent.create().inject(this);
    
            demo.work();
        }
    }
    

    然后我们就可以看到我们的代码可以正常工作了。

    Dagger2中的概念

    @Inject: 作用于字段,构造方法,方法。
    作用于字端是表示被注入的字段。
    作用于方法时,在注入时这个方法会被执行。
    作用于构造方法则表示通过这个方法被注入(不需要provide)
    @Module:作用于类,表示该类用于管理依赖
    @Component: 作用于接口,生成一个类用于将依赖注入到需要的地方
    @Provide: 作用于方法,在module类中,表示生成依赖的地方。

    相关文章

      网友评论

        本文标题:Dagger2入门(二)—— Dagger2的简单使用

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