Androidandroid成神之路手机移动程序开发

Android第三方の依赖注入【Dagger/ButterKni

2017-04-08  本文已影响291人  耑意儿
目录:
1、依赖注入
2、Dagger
3、ButterKnife
4、Dagger与ButterKnife对比

1. 依赖注入

1.1. 概念

依赖注入是一种<a>“设计模式”</a>。最早出现在Spring中。
依赖注入:【DI:Dependency Injector】指的是通过一定的规则管理对象间的依赖关系。依赖注入是控制反转的一种实现方式。
控制反转【IOC:Inversion of Control】是一个重要的面向对象编程的法则,用来削减计算机程序的耦合问题。他有两种实现方式,1:依赖注入;2:依赖查找。依赖注入是更好的IOC实现方式。

1.2. 作用

将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口。当系统重构的时候,代码的改写量将大大减少。

1.3. 实现方式

依赖注入有几个实现方式:

那么,安卓有哪些依赖注入框架呢?

1.4. 依赖注入框架

2. Dagger概述

假设我们有N多个页面都要用到某个对象,也就是说本来需要在每个页面里都实例化该对象才可以调用。Dagger可以帮我们把这个依赖对象的实例化工作做掉,我们只需要在需要用到该对象的类中添加注解(如:UserInfo对象):

@Inject
UserInfo userInfo;

之后我们就可以直接在该类中使用userInfo这个对象了。
当然有个前提,得先告诉Dagger怎么获取这个实例化对象。如下:

public class UserInfo{
    @Inject
    public UserInfo(){
    }
    public String getName(){
        return "Lisa";
    }
}

传送门✈✈✈Dagger-Github
Dagger官方文档
看不懂???,换一个:
Dagger中文文档

2.1. 配置

在工程根目录下的build.gradle文件中,在buildscript的dependencies 中添加:

buildscript {
    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

在app的build.gradle文件顶部添加插件:

apply plugin: 'com.neenbedankt.android-apt'

在dependencies中添加:

// apt command comes from the android-apt plugin
apt 'com.google.dagger:dagger-compiler:2.2'
compile 'com.google.dagger:dagger:2.2'
provided 'javax.annotation:jsr250-api:1.0'

2.2. 注解标签

@Module:注入对象提供者所在的模块,可理解为生产实例的工厂。
@Provides:注入对象的提供者,告诉Dagger这是一个用于提供实例对象的函数
@Component:用于注解接口。是连接被注入的类与需要被注入的类之间的纽带。
@Inject:注解预备被注入的类的构造函数,注解注入对象的实例。
@Named:用于给@Provides提供别名,使用的时候也加上别名。
@Singleton:单例,有些类不需要用到不同的实例对象,就可以添加该注解,实现单例。 但这个单例只是范围内的。

注意:

参考资料:
[11]——MVP 模式之 先说说 Dagger (2)
个人觉得是篇不错的入门文章。

3. ButterKnife

传送门✈✈✈ButterKnife Github

3.1. 配置

dependencies {
  compile 'com.jakewharton:butterknife:8.5.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'

在buildscript中添加:

buildscript {
  repositories {
    mavenCentral()
   }
  dependencies {
    classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
  }
}

4.2. 使用

@BindView(R.id.main_recycler_list)
private RecyclerView mRecyclerView;
@OnClick(R.id.main_btn_tip)
public void showTip(View view){
 Snackbar.make(view, "This is ButterKnife Demo!!!",Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
}
// 在setContentView(R.layout.layout_name)后面绑定
ButterKnife.bind(this);

4. Dagger与ButterKnife对比

ButterKnife只是做View的注入,避免样板代码,代替findViewById()
Dagger能够注入到任何你想要的对象,只要其在module类中。或者它是构造器。但是缺少对方法和字段的注入支持。

参考资料

聊聊 Android 中的依赖注入
Android Dagger依赖注入框架浅析
android依赖注入框架Dagger和Butterknife实战
[11]——MVP 模式之 先说说 Dagger (2)
ButterKnife使用和原理
再次声明,阿喵只是知识的搬运工。。。

上一篇 下一篇

猜你喜欢

热点阅读