1.最近接触一个MVP的项目,涉及到Dagger2的使用。一开始拿到项目代码的时候,大脑一片空白!之前没有接触过Dagger,没办法硬着头皮看了一篇有关Dagger2的简单入门博客。
2.直接进入主题:Dagger2涉及到三个要素,Module、Component、Container
3.今天的学习心得:Dagger2的注入规则,用@Inject注释的成员变量的依赖会首先从Module的@Provides方法集合中查找。如果查找不到的话,则会查找成员变量类型是否有@Inject构造方法,并会调用该构造方法注入该类型的成员变量。这时如果被@Inject注释的构造方法有参数的话,则将会继续使用注入规则进行递归查找。
4.关键词:递归查找!利用这个注入规则,我们可以轻松注入很多对象!从而实现类与类之间解耦的关键特性!
03.15 后续补充
1.对@Component注解的理解:我们另外还需要一个中间件去连接 依赖提供方 和 依赖使用方,这就是 @Component!!!
举个简单的例子
public class Tester { @Inject public Tester() { } } public class MainActivity extends Activity { @Inject Tester tester; }
@Component public interface TestComponent { void inject(CActivity cActivity); } 在 MainActivity 的 onCreate() 加入: @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... DaggerTestComponent.builder().build().inject(this); ... }DaggerTestComponent 是 Dagger2 帮我们生成的类,命名规则就是在我们定义的接口名称前加上Dagger,实现了我们之前定义的 TestComponent 接口。执行完这一行代码,tester 就已经不是 null 了。