美文网首页
依赖注入

依赖注入

作者: Gryllus | 来源:发表于2017-09-20 17:58 被阅读0次

1.什么是依赖注入

DI ,简单的讲,讲对象创建的过程交给容器,在需要的时候直接去拿,而不是代码中创建。是ioc的一种实现方式。
在 Java 领域中,我们就有 Spring、Guice 以及最近的 Dagger。
参考这篇文章:依赖注入和控制反转的理解,写的太好了

2.为什么使用这个技术

1.降低代码之间的耦合,主要是一个类中创建另一个类,构成相互依赖的情况。
2.便于测试

3.Android 中的注入框架

3.1 Dragger2

3.1.1 介绍
Dagger 得名于树状结构的依赖。能更准确地记住这是个依赖图,实际上是有向无环图,或者说是 DAG,因此取名为 DAGger。
Google 的一个团队还是决定做些改进,所以他们创造了 Dagger 2。
Dagger 2在编译时完成了更多的工作,也很好地移除了反射,最后还能生成比最初版本Dagger 更容易调试的代码。
它使得开发效率更高,省去创建对象的过程,代码充分解耦,同时可以更好的管理生命周期
_3.1.2 使用介绍
@Compone inject 和Module的桥梁,是一个接口,定义了需要实例的类型;
@inject Dragger2会构造它的实例以满足依赖的需求;
@Module 将一个类进行module注解,编译器就会在这个类进行查找需要的依赖实例。多个module相互分离,组合在一起使用;
@Provide 在module内使用,告诉编译器需要如何进行构造;
@Scope 非常强大的功能,可以通过自定义注解来管理生命周期,比如使用--------@PerFragment @PerActivity @PerUser等;
@Qualifier 当注入的参数不足以满足依赖的时候使用,比如context ,可以自定义qualifier annotation 比如 @ForActiivty,@ForApplication

@Inject Inject主要有两个作用,一个是使用在构造函数上,通过标记构造函数让Dagger2来使用(Dagger2通过Inject标记可以在需要这个类实 例的时候来找到这个构造函数并把相关实例new出来)从而提供依赖,另一个作用就是标记在需要依赖的变量让Dagger2为其提供依赖。

@Provide 用Provide来标注一个方法,该方法可以在需要提供依赖时被调用,从而把预先提供好的对象当做依赖给标注了@Injection的变量赋值。provide主要用于标注Module里的方法

@Module 用Module标注的类是专门用来提供依赖的。有的人可能有些疑惑,看了上面的@Inject,需要在构造函数上标记才能提供依赖,那么如果我们需要提供 的类构造函数无法修改怎么办,比如一些jar包里的类,我们无法修改源码。这时候就需要使用Module了。Module可以给不能修改源码的类提供依 赖,当然,能用Inject标注的通过Module也可以提供依赖

@Component Component一般用来标注接口,被标注了Component的接口在编译时会产生相应的类的实例来作为提供依赖方和需要依赖方之间的桥梁,把相关依赖注入到其中。

3.3.3 くぞ 
① build.gradle

apply plugin: 'com.neenbedankt.android-apt'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
}
dependencies {
apt 'com.google.dagger:dagger-compiler:2.0'
compile 'com.google.dagger:dagger:2.0'
provided 'javax.annotation:jsr250-api:1.0'
...
}
浅析Dagger2的使用
Dagger2 最清晰的使用教程
_1.@inject @component
_2.@provided @module

3.2 Butterknife

3.2.1 介绍
3.2.2 使用

Android 如何编写基于编译时注解的项目

Reference
Android中的依赖注入
Tasting Dagger 2 on Android
dragger2-git-sample
Android注解快速入门和实用解析

相关文章

  • 开源项目的依赖注入

    开源项目的依赖注入 依赖注入概念 依赖注入(DI:Dependency Injection): 依赖注入方式: B...

  • 资料收集

    依赖注入 AngularJs依赖注入的研究 (已读) 依赖注入(已读)

  • Dagger2常用注解诠释

    依赖注入 控制反转(IoC)与依赖注入(DI)浅谈依赖注入理解依赖注入(IOC)和学习Unity Gradle配置...

  • Day62 Spring 依赖注入源码解析

    手动注入自动注入 依赖注入,set注入,构造注入 依赖注入: Key依据 byType byName constr...

  • Dagger2 源码分析

    Dagger简单介绍 Dagger2涉及到依赖注入,有关依赖注入的请到理解依赖注入 通过注解方式实现依赖注入分为两...

  • 依赖注入(转)

    依赖注入(转) 原文地址:依赖注入原理

  • Spring学习之依赖注入

    Spring学习之依赖注入 依赖注入的基本概念 依赖注入(Dependecy Injection),也称为IoC(...

  • 依赖注入及Dagger2框架简介

    依赖注入简介 在介绍Dagger框架之前我们先来看看依赖注入(Dependence Injection),依赖注入...

  • 浅谈依赖注入

    依赖注入是什么? 依赖注入的作用是什么? 依赖注入的应用场景? 如何实现依赖注入? 对于一个后端程序员来说,依赖注...

  • 依赖注入的方式

    依赖注入: 依赖于某些方式给Bean的资源进行注入 Spring 支持三种依赖注入的方式 属性注入 构造器注入 工...

网友评论

      本文标题:依赖注入

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