美文网首页
Dagger2初体验

Dagger2初体验

作者: jdallen | 来源:发表于2019-11-21 09:30 被阅读0次
    2720645-f38785b8a2c82ac1.png

    0、配置环境
    build.gradle(Module:app)

    android {
          defaultConfig {
                  ..........
                javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
          }
    }
    
    dependencies {
      // Annotation
        api 'com.google.dagger:dagger:2.0.2'
        api 'com.google.dagger:dagger-compiler:2.0.2'
        compileOnly 'org.glassfish:javax.annotation:10.0-b28'
    }
    

    1、创建一个对象类

    public class PeopleBean {
    
        public PeopleBean() {
    
        }
    
        public void playGame() {
            Log.e("ATU", "玩游戏");
        }
    }
    

    2、创建一个Module

    //第一步 添加@Module 注解
    @Module
    public class PeopleMainModule {
        //第二步 使用Provider 注解 实例化对象
        @Provides
        PeopleBean providerA() {
            return new PeopleBean();
        }
    }
    

    3、创建一个Component接口

    //第一步 添加@Component
    //第二步 添加module
    @Component(modules = {PeopleMainModule.class})
    public interface PeopleMainComponent {
        //第三步  写一个方法 绑定Activity /Fragment
        void inject(MainActivity activity);
    }
    

    注意:Rebuild后build文件夹会生成一个DaggerPeopleMainComponent类(Dagger+你的Component接口名,位置和你的Component接口在一个包目录下)

    4、在MainActivity使用

    // 使用Inject 注解,获取到PeopleBean 对象的实例
    @Inject
    PeopleBean peopleBean;
    
    
    //添加依赖关系
    DaggerPeopleMainComponent.builder().build().inject(this);
    
    
    //调用PeopleBean对象的方法
    peopleBean.playGame();
    

    当PeopleBean多了一个构造参数

    public class PeopleBean {
        private TwoBean twoBean;
    
        public PeopleBean(TwoBean twoBean) {
            this.twoBean = twoBean;
        }
    
        public void playGame() {
            Log.e("ATU", twoBean.getName()+"玩游戏");
        }
    }
    
    public class TwoBean {
    
        private String name;
    
        public TwoBean(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    

    只需将Moudle改为:

    //第一步 添加@Module 注解
    @Module
    public class PeopleMainModule {
        //第二步 使用Provider 注解 实例化对象
        @Provides
        PeopleBean providerA(TwoBean twoBean) {
            return new PeopleBean(twoBean);
        }
    
        @Provides
        TwoBean providerB(){//提供给上面的providerA方法参数
            return new TwoBean("小陈");
        }
    }
    

    当一个有类的构造方法使用@Inject时,使用该类时,同样使用 @Inject

    public class HasInjectBean {
        private PeopleBean peopleBean;
    
        @Inject
        public HasInjectBean(PeopleBean peopleBean) {
            this.peopleBean = peopleBean;
        }
    
        public void getL(){
            Log.e("ATU","我是有@Inject的bean类");
            peopleBean.playGame();
        }
    }
    
    // 使用Inject 注解,获取到HasInjectBean对象的实例
    @Inject
    HasInjectBean hasInjectBean;
    //添加依赖关系
    DaggerPeopleMainComponent.builder().build().inject(this);
    //调用HasInjectBean 对象的方法
    hasInjectBean.getL();
    

    相关文章

      网友评论

          本文标题:Dagger2初体验

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