美文网首页
聊一聊Dagger2

聊一聊Dagger2

作者: 哎一不小心就 | 来源:发表于2018-12-29 12:00 被阅读0次

            网上有很多关于Dagger2的文章,但是我觉得很多地方解释起来都是比较拗口不便于理解,以下全文是我的理解。

            Dagger2:是依赖注入,主要用于模块间的解耦,比如一个类在多处被new出来,假如它的构造方法改了,那么这个类所有被实例化的地方都要改,那么Dagger2就可以派上用场了。

            了解Dagger2 必然要关注@Component 、@Module、@Inject

            一、@Inject    用于通知Dagger2需要被依赖注入的类

    被@Inject标识的类

            二、@Module    Modules类提供通过@Inject标识要实例化类所需的参数,通过@Module标识,通过@Provides对外提供;modules的一个重要特征是它们设计为分区并组合在一起(说人话就是在我们的app中可以有多个组成在一起的modules);第一张图是可以直接实例化,第二张图是不能直接实例化的用过构造方法传进来。

    被@Module标识的类

            三、@Component    Component是一个接口作为Module和Inject的桥梁,是将Module提供的参数,注入到@Inject标注的对象中

    被@Component标识的类

            如果真正消耗依赖的地方是子类,那么上面的参数就不能写父类。因为Dagger2在编译时生成依赖注入的代码,会到inject方法的参数类型中寻找通过@inject标识的引用,如果没有找到Dagger2会认为没有需要注入的对象。

            了解以上三个类就能基本的使用Dagger2啦,当然Dagger2还有其他的标识。

            @ Socpe 用于自定义注解限定注解作用域

    步骤一:首先我这边通过@Scope定义一个@interface ActivityScope注解。

    步骤二: 运用的话可以放在Module处或者Component处,这两处也可以配合使用(@Singleton也一样)。

            但是如果Component依赖的Module的@Provide有@Scope,则@Component也必须要有,否则编译会报错(@Singleton也一样)例如:

            @Singleton 标识当前的对象或方法是单例模式

            至此你可以在项目中使用Dagger2啦

    相关文章

      网友评论

          本文标题:聊一聊Dagger2

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