美文网首页
dragger2新了解

dragger2新了解

作者: itwillrain | 来源:发表于2017-09-11 18:52 被阅读0次

    @Inject

    构造器注入,@Inject标注在构造器上其实有两层意思。

    ①告诉Dagger2可以使用这个构造器构建对象。如Rose类

    注入构造器所需要的参数的依赖。 如Pot类,构造上的Rose会被注入。

    构造器注入的局限:如果有多个构造器,我们只能标注其中一个,无法标注多个。

    属性注入

    如MainActivity类,标注在属性上。被标注的属性不能使用private修饰,否则无法注入。

    属性注入也是Dagger2中使用最多的一个注入方式。

    方法注入 // 添加监听

    标注在public方法上,Dagger2会在构造器执行之后立即调用这个方法。

    方法注入和属性注入基本上没有区别, 那么什么时候应该使用方法注入呢?

    比如该依赖需要this对象的时候,使用方法注入可以提供安全的this对象,因为方法注入是在构造器之后执行的。

    比如google mvp dagger2中,给View设置Presenter的时候可以这样使用方法注入。

    /**

    * Method injection is used here to safely reference {@code this} after the object is created.

    * For more information, see Java Concurrency in Practice.

    */

    @Inject

    void setupListeners() {

    mTasksView.setPresenter(this);

    }

    Component中一般使用两种方式定义方法。

    void inject(目标类  obj);Dagger2会从目标类开始查找@Inject注解,自动生成依赖注入的代码,调用inject可完成依赖的注入。

    Object getObj();如:Pot getPot(); // 类似初始化一些类,提供其他component使用

    Dagger2会到Pot类中找被@Inject注解标注的构造器,自动生成提供Pot依赖的代码,这种方式一般为其他Component提供依赖。(一个Component可以依赖另一个Component,后面会说)

    相关文章

      网友评论

          本文标题:dragger2新了解

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