本系列博客主要用于自己学习积累,顺便帮助新手入门,如有问题,多多包涵。更详细的一些使用可以看看其他更加详细的博客。

在安卓实际开发中,我们需要用到许多的activity以及fragment,这样我们在进行依赖注入的之后都要进行一些重复的操作,比如在comonent中加入void inject(XXXActivity activity),以及在Activity中加入DaggerMyAppComponent.builder().build().inject(this),好在dagger2也提供了解决方法,让我们不需要每次去写inject方法。

添加依赖

implementation 'com.google.dagger:dagger:2.21'

annotationProcessor 'com.google.dagger:dagger-compiler:2.21'

implementation 'com.google.dagger:dagger-android:2.21'

implementation 'com.google.dagger:dagger-android-support:2.21'

annotationProcessor 'com.google.dagger:dagger-android-processor:2.21'

复制代码

开始改造

AndroidInjector

创建一个接口继承AndroidInjector

@Subcomponent(modules = {

AndroidInjectionModule.class,

})

public interface MainActivitySubcomponent extends AndroidInjector {

@Subcomponent.Builder

abstract class Builder extends AndroidInjector.Builder {

}

}

复制代码

ActivityModule

实现用于绑定activity的Module

@Module(subcomponents = MainActivitySubcomponent.class)

public abstract class MainActivityModule {

@Binds

@IntoMap

@ClassKey(MainActivity.class)

abstract AndroidInjector.Factory> bindMainActivityInjectorFactory(MainActivitySubcomponent.Builder builder);

}

复制代码

AppComponent

@Component(modules = {

AndroidInjectionModule.class,

AndroidSupportInjectionModule.class,

MainActivityModule.class,

Main2ActivityModule.class,

})

public interface MyAppComponent {

void inject(MyApplication application);

@Component.Builder

interface Builder{

MyAppComponent build();

}

}

复制代码

Application

application继承HasActivityInjector,实现inject方法,返回DispatchingAndroidInjector对象即可

public class MyApplication extends Application implements HasActivityInjector {

@Inject

DispatchingAndroidInjector dispatchingAndroidInjector;

@Override

public void onCreate() {

super.onCreate();

DaggerMyAppComponent.builder().build().inject(this);

}

@Override

public AndroidInjector activityInjector() {

return dispatchingAndroidInjector;

}

}

复制代码

BaseActivity

baseActivity在super.onCreate之前调用AndroidInjection.inject(this),这样之后的activity就只需要继承它,直接可以使用了,不需要再单独加入inject方法

open class BaseActivity: AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

AndroidInjection.inject(this)

super.onCreate(savedInstanceState)

}

}

复制代码

使用

使用的时候直接@inject就行,无需任何处理

public class MainActivity extends BaseActivity {

@Inject

A2 a2;

@Inject

C c;

@Inject

UserInfo userInfo;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

startActivity(new Intent(MainActivity.this, Main2Activity.class));

}

});

a2.someThingA();

c.doSomethingC();

userInfo.setAge("111");

Log.e("DAGGER", userInfo.toString());

}

}

复制代码

总结

dagger-android-support解决了每次新建Activity都需要在Activity中添加格子的inject方法,所有的inject都在BaseActivity中,这让代码简洁了很多。但是即使如此,还是有较多一部分的模板代码,如例子中的ActivityModule和ActivitySubcomponent。每次新建一个Activity都需要创建这两个类,这样看起来还是很麻烦,好在dagger2还提供了@ContributesAndroidInjector注解解决了这个问题。

demo地址:查看项目中的app模块

dagger android,dagger android 学习(二):AndroidInjector的使用相关推荐

  1. Android OpenGL ES 学习(二) -- 图形渲染管线和GLSL

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  2. 饭否android客户端,fanfou(饭否) android客户端 代码学习二

    FanfouWidget.class 继续 代码学习1  因为重新编辑文章经常出现格式错乱,所以以后先写在记事本里面了 继续上次的发送消息 // 发送消息给widget Intent reflogin ...

  3. Android OpenGL ES 学习(十二) - MediaCodec + OpenGL 解析H264视频+滤镜

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  4. Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  5. Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  6. Android OpenGL ES 学习(十) – GLSurfaceView 源码解析GL线程以及自定义 EGL

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  7. Android OpenGL ES 学习(九) – 坐标系统和实现3D效果

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  8. Android OpenGL ES 学习(五) -- 渐变色

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  9. android dagger2 懒加载,Android Dagger依赖注入框架浅析

    今天接触了Dagger这套android的依赖注入框架(DI框架),感觉跟Spring 的IOC差不多吧.这个框架它的好处是它没有采用反射技术(Spring是用反射的),而是用预编译技术,因为基于反射 ...

  10. Android OpenGl Es 学习(二):定义顶点和着色器

    概述 这是一个新的系列,学习OpengGl Es,其实是<OpenGl Es 应用开发实践指南 Android卷>的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为 ...

最新文章

  1. c mysql存储过程实例_MySQL存储过程实例
  2. 深入理解最大池化为什么能够实现不变性?
  3. 信息检索及DM必备知识总结:luncene
  4. linux进入mongodb数据库命令,MongoDB 常用数据库命令,命令是如何工作的这里
  5. swoole mysql 连接数_用swoole简单实现MySQL连接池
  6. mssql sql server 其它系统函数 parsename 点语法字符串分割函数应用简介
  7. Java 数据类型及转换
  8. 【js】:利用javascript打开网页
  9. **LPC1788加密与解密方法**
  10. 计算机网络VLAN间路由,交换机必学知识 VLAN间路由理论指导
  11. ubuntu 18.04快捷显示桌面
  12. 计算机网络换算方法,网络带宽换算
  13. 震惊!黄光裕、李嘉诚、马化腾甚至股市中的“野蛮人”都出自潮汕帮(附股)
  14. java小组项目口号,小组口号霸气押韵大全(精选60句)
  15. 李梦娇口诀88条(视频+讲义)
  16. 第十届上海国际泵阀展多会议活动集中发力,邀您共赴6月泵阀盛会
  17. poj2421修建道路
  18. 推荐一份PHP程序员笔试题(附答案)
  19. 关于睡眠排序的小尝试
  20. 怎样使用晨曦记账本,管理收入支出

热门文章

  1. 全球及中国PVC管材和管件市场“十四五”规划及发展前景展望报告2023-2029年
  2. 计算器核心算法(一)
  3. word2vec模型评估_「译」 用 Word2vec 表示音乐?
  4. office2007,每次打开之前都要配置更新,解决办法
  5. 怎么把计算机密码去掉,如何去掉开机密码 怎么把电脑开机密码去掉(图文)
  6. 【react】InfiniteScroll 滚动组件
  7. Vmware Vsphere6.0 OVF模板管理
  8. 上位机开发(详细设计)
  9. 【CSDN三周年纪念日】我的创作纪念日
  10. mysql bcp_bcp用法