一个demo理解什么是Dagger2
来源:互联网 发布:天助网络 编辑:程序博客网 时间:2024/06/07 03:17
标题之所以是Dagger2是因为我没看Dagger^_^,具体Dagger2与Dagger有什么区别请百度这里不再赘述。
使用Dagger2前准备工作
1.配置apt插件
apt插件是用于自动生成代码的,因为Dagger2放弃了反射的方式,而是选择在编译项目时根据注解自动生成相应代码,以提高app性能。即:在编译项目过程中,apt插件根据注解自动生成实际运行的代码。
1.配置apt插件(在build.gradle(Project:xxx)中添加如下代码)
dependencies { classpath 'com.android.tools.build:gradle:2.1.0' // 添加apt插件 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }
2.添加依赖(在build.gradle(Module:app)中添加如下代码)
apply plugin: 'com.android.application' //添加如下代码,应用apt插件 apply plugin: 'com.neenbedankt.android-apt'
2.添加Dagger2相关库
添加依赖(在build.gradle(Module:app)中添加如下代码)
dependencies { ... compile 'com.google.dagger:dagger:2.4' apt 'com.google.dagger:dagger-compiler:2.4' //java注解 compile 'org.glassfish:javax.annotation:10.0-b28' ... }
这样准备工作就做完了,下面就一生产假酒的demo,来理解究竟什么是“依赖注入”。
Demo
1.demo的整体结构
2.代码
Wine
// 生成假酒也是需要酒的,这里决定真酒所占的比重public class Wine { private int num = 0 ; Wine(){ // 一点真酒都没有 } Wine(int num){ this.num = num ; } public String getWineInfo(){ return "添加"+ num + "份酒" ; }}
Water
// 这个就是假酒中水的比例了public class Water { private int num ; Water(){ // 没添水,良心企业 } Water(int num){ this.num = num ; } public String getWater(){ return"添加"+ num + "份水"; }}
FakeWine
// 假酒类,这里就是假酒喽public class FakeWine { private final Water water; private final Wine wine ; // @Inject 用于表明这里需要注入。注意:这里的Wine 和 Water 都是靠注入获得的,并没有直接实例化。 @Inject FakeWine(Wine wine , Water water){ this.wine = wine; this.water = water ; } public String getFakeWineInfo(){ return wine.getWineInfo() + "," + water.getWater() ; }}
既然有需要注入的地方,就要为他提供用于被注入的内容,Dagger2中被注入的内容称之为module,如下:
WaterModule
// @Module表明这个类可用与提供注入内容@Modulepublic class WaterModule { // @Provides 表示具体提供的内容,这里是Water ,Water 的实例化也是在这里,这样FakeWine 就不用关心Water 的具体实现了。 @Provides Water provideWater(){ // 这里的方法名没有严格要求 return new Water(7) ; }}
WineModule
// 同上@Modulepublic class WineModule { @Provides Wine provideWine(){ return new Wine(3) ; }}
现在需要注解的点和提供用于注解的内容都有了,但是还不能确定生产什么样的酒(兑水比例不同,就有多个WaterModule 或 WineModule),所以需要我们将需要将@Inject 和 @Module关联起来,代码如下:
CreateFakeWine
// 生成假酒的具体类public class CreateFakeWine { // @Component 用于将module和inject关联起来 @Component(modules = {WineModule.class , WaterModule.class}) interface GetFakeWine{ FakeWine make() ; } // 这样假酒就生成出来了,具体兑多少水和真酒,在module中修改,无需修改其他地方 public static void main(String args[]){ System.out.println(DaggerCreateFakeWine_GetFakeWine.builder().build().make().getFakeWineInfo()); }}
总结
上面的代码仅是最简单的“依赖注入”的示范,并未对Dagger2进行深入讲解,好处是能快速理解什么是“依赖注入”;其他Dagger2规范,有空再贴。“依赖注入”究竟是怎么实现的,你可以看apt生成的代码,有没有“工厂模式”的既视感^_^。所及对Dagger2你可以这样认为:它是利用注解自动生成“工厂模式”的一个框架,这样就轻松多了。有理解错误的地方希望请留言斧正。
2 0
- 一个demo理解什么是Dagger2
- 一个demo理解什么是MVP
- Dagger2的一个简单Demo
- 一步一步带你写一个dagger2的Demo
- 一个故事理解什么是ERP
- 简单方法:让你理解什么是依赖注入Dagger2(Dependency Injection简称DI)
- Dagger2 概念理解
- Dagger2 学习与理解
- Dagger2自己的理解
- 按照Google官方MVP+RxJava+Retrofit2+Dagger2的Demo自己另做一个,进行讲解。
- MVP+Dagger2+Retrofit2+Rxjava搭建的一个电影相关的Demo
- 什么是DEMO?
- 什么是DEMO
- 一个Demo理解工厂设计模式
- Spring 学习理解及第一个demo
- 一个测试理解什么是主、辅LRU
- 一个故事理解什么是接口回调
- 一些关于dagger2的理解
- 在Java中使用Highcharts+Ajax+Json生成动态饼图
- 浅谈C语言数据类型
- iOS开发时,用charles配置环境
- 两个类成员的模板
- 练习 2.6
- 一个demo理解什么是Dagger2
- 海量数据处理之经典实例分析
- 【Developer Log】tomcat安装的记录
- python 装饰器
- android R文件
- Nginx+Lua 推荐两个开源项目
- 发布项目到tomcat的方法
- android make debug : (.ARM.exidx+0x0): error: undefined reference to '__aeabi_unwind_cpp_pr1'
- Centos下Zookeeper设置自启动