前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记(二十二)——Dagger2使用

笔记(二十二)——Dagger2使用

作者头像
木溪bo
发布2019-08-25 09:57:48
6100
发布2019-08-25 09:57:48
举报

——个人平时笔记,看到的同学欢迎指正错误,文中多处摘录于各大博主与书籍精华 参考见:Android开发之Dagger2--Module&Component(三) 【个人理解:Module类可提供返回多个实例来绑定到Component包装类,然后包装类Component再在要使用的类或者位置中进行注入实例,最后就可以使用了】 可以把这个框架就把它想成了一个注射器,component是针管,module是注射瓶,里面的依赖对象是注入的药水,build方法是插进患者,inject方法的调用是推动活塞。 1.@Module:用来修饰类,表示此类的方法是用来提供依赖的,它告诉Dagger在哪里可以找到依赖,在这个类里实例化要用到的对象,比如全局要用到的SharedPreferences、Retrofit。 2.@Provides:在@Module 中使用,我们定义的方法用这个注解,用于告诉 Dagger 我们需要构造实例并提供实例返回。 3.@Singleton 单例,类似单例模式,使用@Singleton注解之后,对象只会被初始化一次,之后的每次都会被直接注入相同的对象。@Singleton就是一个内置的作用域,即局部单例。 4.@Component: 是@Inject注入和@Module组件的桥梁,需要列出所有被@Module注解修饰的Module类组件以组成一个完整的组件,Component是一个包装类,用于从@Module中获取依赖并将依赖注入给@Inject

代码语言:javascript
复制
@Singleton
@Component(modules = {
        StorageModule.class ,
        ScheduleModule.class
})
public interface StorageComponent {

    Storage execute();
    void inject(MainActivity mMainActivity);
}
--------------------- 
参考原文:https://blog.csdn.net/qq_17766199/article/details/50606011 

Dagger会按照上面接口生成一个实现类,生成类以Dagger为前缀即DaggerStorageComponent,其中DaggerStorageComponent是StorageComponent的一个实体类,提供builder()来生成实例,里面使用Builder构建了一个。

要注入一个类,可以通过两种方法:

  1. 在类的构造方法上添加@Inject注解
  2. @Module +@Providers注解注入工厂的方式
代码语言:javascript
复制
public class MainActivity extends AppCompatActivity{

    private StorageComponent component;

    @Inject
    Storage mStorage;//构建dagger的DaggerStorageComponent后就可以注入了

    @Override
    public void onCreate() {
        super.onCreate();

        component = DaggerStorageComponent//自动生成的Dagger前缀类
                .builder()//调用构建类
                .storageModule(new StorageModule(this)) //传入Module,storageModule为构造方法
                .build();//生成实例
                .inject(this);//注入MainActivity.
    }
}
---------------------  
原文:https://blog.csdn.net/qq_17766199/article/details/50606011 

5.@Scope。在Dagger 2中,@Scope被用于标记自定义的scope注解,可以理解为生命周期。简单说它们可以类似单例地标记依赖。被作注解的依赖会变成单例,但是这会与component的生命周期(不是整个应用)关联。 6.多个Component依赖。@Subcomponent是复用组件,我们想复用组件时,可以使用它,下面是父组件使用方法。另一种是注解属性添加dependencies。

代码语言:javascript
复制
--->子类:给UserComponent添加UserModule依赖
@Subcomponent(modules = {
        UserModule.class
})
public interface UserComponent {
    void inject(SecondActivity mSecondActivity);
}
//-------------------------------------------------------
--->父类
@Singleton
@Component( modules ={ AppModule.class})
public interface AppComponent {
    Context getAppContext();
     //复用UserComponent 
    UserComponent createUserComponent(UserModule userModule);
}

Dagger2使用AndroidInjector便捷注入

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.08.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档