Android —— Dagger依赖注入库

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或者抽象类
@Component
public 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);
报错找不到类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值