dragger2新了解

2017-09-11  本文已影响0人  itwillrain

@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,后面会说)

上一篇下一篇

猜你喜欢

热点阅读