Android —— Dagger依赖注入库

来源:互联网 发布:哥本哈根大学 知乎 编辑:程序博客网 时间:2024/05/17 00:10

Dagger2介绍

Dagger2 是一个Android依赖注入框架,由谷歌开发,最早的版本Dagger1 由Square公司开发。依赖注入框架主要用于模块间解耦,提高代码的健壮性和可维护性。Dagger 这个库的取名不仅仅来自它的本意“匕首”,同时也暗示了它的原理。Jake Wharton 在对 Dagger 的介绍中指出,Dagger 即 DAG-er,这里的 DAG 即数据结构中的 DAG——有向无环图(Directed Acyclic Graph)。也就是说,Dagger 是一个基于有向无环图结构的依赖注入库,因此Dagger的使用过程中不能出现循环依赖。

通过注解实现

Dagger2 通过注解来生成代码,定义不同的角色,主要的注解有:@Inject、@Module 、@Component 、@Provides 、@Scope 、@SubComponent 等。

大致方法:

  • 首先进行配置信息
    1)使用Android Studio 创建一个新的项目,在Project的 build.gradle文件添加以下内容:
buildscript {    dependencies {        classpath 'me.tatarka:gradle-retrolambda:3.2.4'        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'    }}

2)并在Module下的build.gradle添加以下内容:

apply plugin: 'com.neenbedankt.android-apt' //一定要设置,下面的apt依赖才能实现apply plugin: 'me.tatarka.retrolambda'android {    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }}dependencies {    apt 'com.google.dagger:dagger-compiler:2.4'    compile 'com.google.dagger:dagger:2.4'    provided 'org.glassfish:javax.annotation:10.0-b28'}

# @inject

通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。这样,Dagger就会构造一个这个类的实例并满足他们的依赖。
基本使用实例:
1.需要用来注入的类

public class Poetry {    private String mPemo;    // 用Inject标记构造函数,表示用它来注入到目标对象中去    @Inject    public Poetry() {        mPemo = "生活就像海洋";    }    public String getPemo() {        return mPemo;    }}

2.连接器 Component

//用@Component表示这个接口是一个连接器,能用@Component注解的只//能是interface或者抽象类@Componentpublic interface MainComponent {    /**     * 需要用到这个连接器的对象,就是这个对象里面有需要注入的属性     * (被标记为@Inject的属性)     * 这里inject表示注入的意思,这个方法名可以随意更改,但建议就     * 用inject即可。     */    void inject(MainActivity activity);}

3.注入使用

public class MainActivity extends Activity {    //添加@Inject注解,表示这个mPoetry是需要注入的    @Inject    Poetry mPoetry;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 使用Dagger2生成的类 生成组件进行构造,并注入        DaggerMainComponent.builder()                .build()                .inject(this);        Toast.makeText(getApplicationContext(),mPoetry.getPemo(),Toast.LENGTH_SHORT).show();    }}

结果:
弹Toast:生活就像海洋。

注意点:
一定要有连接器 ,利用@Component来标注,否则会DaggerMainComponent.builder()
.build()
.inject(this);
报错找不到类。

0 0
原创粉丝点击