// 添加其他插件
apply plugin: 'com.neenbedankt.android-apt'//添加apt命令
dependencies {
apt 'com.google.dagger:dagger-compiler:2.0.2' //指定注解处理器
compile 'com.google.dagger:dagger:2.0.2' //dagger公用api
provided 'org.glassfish:javax.annotation:10.0-b28' //添加android缺失的部分javax注解
}
> 注意:AndroidStudio升级3.0后,Dagger2引入有所变化,不在支持apt1.8了
> 配置方法为,直接在dependencies里添加即可(记得在project的build.gradle里指定 ext.dagger2\_version = ‘2.0.2’)
> 参考[Android Studio升级3.0.0遇到的问题与解决办法]( )
dependencies {
annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version" //指定注解处理器
implementation "com.google.dagger:dagger:$dagger2_version" //dagger公用api
compileOnly 'org.glassfish:javax.annotation:10.0-b28' //添加android缺失的部分javax注解
}
#### 2\. 增加一个类SaladModule
> 首先声明:前面写的三个被依赖的类(Pear、Banana、 SaladSauce),不用做任何改动
>
> 下面要用到两个关键的注解**@Module**、**@Provides**
/**
-
Module管理所有的依赖
-
就好比:你要做一个沙拉,需要(依赖)Pear/Banana/SaladSauce
-
这里就把Pear/Banana/SaladSauce这三个被依赖的类管理起来
-
方便你在之后获取Pear/Banana/SaladSauce的对象
*/
@Module
public class SaladModule {
@Provides
// 按照格式写就好了,
// 返回值(被依赖的类类型)
// 方法名(provideXxx必须以provide开头,后面随意)
public Pear providePear(){
return new Pear();//返回这个类的对象
}
@Provides
public Banana provideBanana(){
return new Banana();
}
@Provides
public SaladSauce provideSaladSauce(){
return new SaladSauce();
}
}
#### 3\. 增加一个接口SaladComponent
> 下面要用到一个关键的注解**@Component**
@Component(modules = {SaladModule.class})//指明要在那些Module里寻找依赖
public interface SaladComponent {
//注意:下面这三个方法,返回值必须是从上面指定的依赖库SaladModule.class中取得的对象
//注意:而方法名不一致也行,但是方便阅读,建议一致,因为它主要是根据返回值类型来找依赖的
//★注意:下面这三个方法也可以不写,但是如果要写,就按照这个格式来
//但是当Component要被别的Component依赖时,
//这里就必须写这个方法,不写代表不向别的Component暴露此依赖
Pear providePear();
Banana provideBanana();
SaladSauce provideSaladSauce();
//注意:下面的这个方法,表示要将以上的三个依赖注入到某个类中
//这里我们把上面的三个依赖注入到Salad中
//因为我们要做沙拉
void inject(Salad salad);
}
#### 4\. 重写Salad类
> 下面要用到一个关键的注解**@Inject**
public class Salad {
@Inject //表示注入这个依赖
Pear pear;
@Inject
Banana banana;
@Inject
SaladSauce saladSauce;
public Salad() {
// DaggerSaladComponent编译时才会产生这个类,
// 所以编译前这里报错不要着急(或者现在你先build一下)
SaladComponent saladComponent = DaggerSaladComponent.create();
saladComponent.inject(this); //将saladComponent所有连接的SaladModule中管理的依赖注入本类中
makeSalad(pear, banana, saladSauce);
}
private void makeSalad(Pear pear, Banana banana, SaladSauce saladSauce) {
Log.e("TAG", "我在搅拌制作水果沙拉");
}
}
### 5.测试
08-31 15:53:46.117 24628-24628/com.demo.dagger2demo2 E/TAG: 我是一个梨
08-31 15:53:46.118 24628-24628/com.demo.dagger2demo2 E/TAG: 我是一个香蕉
08-31 15:53:46.118 24628-24628/com.demo.dagger2demo2 E/TAG: 我是沙拉酱
08-31 15:53:46.118 24628-24628/com.demo.dagger2demo2 E/TAG: 我在搅拌制作水果沙拉
1. 增加一个类SaladModule
2. 使用@Component增加一个SaladComponent接口
3. 目标类使用依赖注入
a)使用@Inject声明属性变量,表示注入这个依赖
b)调用saladComponent的inject,注入依赖
```
// DaggerSaladComponent编译时才会产生这个类,
// 所以编译前这里报错不要着急(或者现在你先build一下)
SaladComponent saladComponent = DaggerSaladComponent.create();
saladComponent.inject(this);//将saladComponent所连接的SaladModule中管理的依赖注入本类中
```
或者调用下面方法,也可以
DaggerSaladComponent.builder()
.saladModule(new SaladModule())
.build()
.inject(this);
### 以上只是最最简单的一个例子,入门再说
### 接下来讲到:
1. 被依赖的类,如果带有参数,怎么办
2. 被依赖的类,如果有多个构造函数,Dagger2怎么区分(依赖迷失)
3. @Scope
4. @Singleton
参考文章
----
1. \[Android常用开源工具(1)-Dagger2入门\]([http://blog.csdn.net/duo2005duo/article/details/50618171]( ) )(总结的相当到位)
1. \[ Android:dagger2让你爱不释手 - 重点概念讲解,融合篇\]([http://www.jianshu.com/p/1d42d2e6f4a5]( ) )(解释概念绝对好文章)
2. \[ 解锁Dagger2使用姿势\]([http://blog.csdn.net/u012702547/article/details/]( ) 52200927 )(结合例子,通俗易懂)
本文转自 [https://blog.csdn.net/Android\_Study\_OK/article/details/52384247]( ),如有侵权,请联系删除。
### 最后
简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。
面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。
另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤......所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!
最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。
希望大家都能找到合适自己满意的工作!
**如果需要PDF版本可以在GitHub中自行领取!**
* ##### **[或者点击这里自行下载,直达领取链接](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**
**进阶学习视频**

**附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题** (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
