Dagger2的简单使用

news/2024/7/4 23:34:42

解耦和方式

1、利用配置文件,使用反射获取到需要加载的对象。

2、设计模式:单例、工厂、观察者……

Dagger2简介

1、什么是Dagger2?

Dagger是为Android和Java平台提供的在编译时进行依赖注入的框架。

编译时:编辑时生成代码(rebulid),我们完成所需对象的注入。(假设使用反射,应该是运行时起作用)。

2、为什么使用Dagger2?

Dagger2解决了基于反射带来的开发和性能上的问题。

一、引入配置

1、添加dagger2的依赖

compile'com.google.dagger:dagger:2.6'//dagger公用api

apt'com.google.dagger:dagger-compiler:2.0.2'//指定注解处理器

provided'org.glassfish:javax.annotation:10.0-b28'//添加android缺失的部分javax注解

2、编译时生成代码的插件配置(android-apt)

project的gradle中添加

buildscript{

dependencies {

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

}

}

apt插件的使用

modle的gradle中添加

applyplugin: 'com.neenbedankt.android-apt'

关联Dagger2

dependencies {

apt 'com.google.dagger:dagger-compiler:2.6'

}

操作步骤

目标:替换掉presenter = new MainActivityPresenter(this);

第一步:指定要注入的目标

@Inject

MainActivityPresenterpresenter;

第二步:将new MainActivityPresenter(activity)代码放到指定的方法中

@Module

public classMainModule {

privateMainActivityactivity;

publicMainModule(MainActivity activity) {

this.activity= activity;

}

@Provides

publicMainActivityPresenterprovideMainActivity() {

return newMainActivityPresenter(activity);

}

第三步:建立activity和module建立关系(=)

@Component(modules= MainModule.class)

public interfaceMainActivityComponent {

voidin(MainActivity activity);

}

第四步:Rebuild Project

第五步:

DaggerMainActivityComponent component = (DaggerMainActivityComponent) DaggerMainActivityComponent.builder()

.mainModule(newMainModule(this))

.build();

component.in(this);

深入理解Dagger:

在操作中会使用到@Inject、@Module、@Provides、@Conponent注解,那么他们分别在完成什么工作?

MainActivityPresenter  presenter            =              new MainActivityPresenter(this);

@Inject                                       @Conponent                       @Module  @Provides



http://www.niftyadmin.cn/n/3649145.html

相关文章

[收藏]“白发”,已经成为IT人的特征之一

2004年中国IT渠道的“七种”颜色作者: 《计算机产品与流通》白发一次采访中,不经意间瞥到了被访者的鬓角,发现这位还不到40岁的总经理,居然已经是两鬓班白。更令人惊奇的是,坐在旁边的副总经理也已白发满头。自此&…

react hooks使用_使用React Hooks将React类组件转换为功能组件的五种方法

react hooks使用The latest alpha release of React introduced a new concept called Hooks. Hooks were introduced to React to solve common problems; however, they primarily serve as an alternative for classes. With Hooks, you can create functional components t…

Genymotion安卓模拟器常见问题汇总

Genymotion模拟器在安装好多由于电脑设备的关系可能出现兼容性、网络连接等问题,这里带来它们的解决方法。 1、关于兼容性的关键 下载完把这个zip文件(点我下载)直接拖到手机虚拟屏幕上就会提示安装,安装完了就会要求重启手机&…

Ubuntu 12.04下LAMP安装配置(转)

想要安装一台 Ubuntu 12.04版的Linux服务器,用这台服务器上的LAMP套件来运行我自己的个人网站。LAMP套件就是“LinuxApacheMysqlPHP这四款软件组成了一个可以使网站运行的套装工具软件。”通过安装尝试,我获得了一些成功的安装配置经验,通过本…

Retrofit的简单使用

一、Retorfit简介 Retorfit是一个功能强大的联网工具。可以看成是OKHttp数据解析(json、xml等)的组合。 说明文档:http://square.github.io/retrofit/ GitHub:https://github.com/square/retrofit 二、使用手册 1.引入配置 添加Retrofit依赖:…

如何为自定义Vue.js组件添加`v-model`支持

介绍 (Introduction) The v-model directive is one of the few directives that comes bundled with Vue.js. This directive allows for two-way data binding between our data and views. v-model指令是Vue.js附带的少数几个指令之一。 该指令允许在我们的数据和视图之间进…

mongodb启动失败[转]

现象: 查看日志的内容如下 Tue Jan 4 09:51:37 MongoDB starting : pid2794 port27017 dbpath/var/lib/mongodb 32-bit ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data ** see http://blog.mongodb.org/post/137788967/…

Android的各种Drawable讲解

Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型。Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接接触Drawable的实现类。在实际的开发过程中,会把使用到的资源都放置在res/draw…