No1:

Project的build.gradle文件添加

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

Module:app的build.gradle添加

apply plugin: 'com.neenbedankt.android-apt'
...
dependencies{
...
apt 'com.google.dagger:dagger-compiler:2.7'
compile 'com.google.dagger:dagger:2.7'
}

No2:

@Inject、@Component

public class Watch{
@Inject
public Watch(){
}
public void work(){
}
}
@Component
public interface MainActivityComponent{
void inject(MainActivity activity);
}

调用

public class MainActivity extends AppCompatActivity{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerMainActivityComponent.create().inject(this);//
watch.work();
}

No3:

@Module、@Provides

@Inject
Gson gson;
@Module
public class GsonModule{
@Provides
public Gson provideGson(){
return new Gson();
}
}
@Component(modules = GsonModule.class)
public interface MainActivityComponent{
void inject(MainActivity activity);
}

调用

public class MainActivity extends AppCompatActivity{
@Inject
Gson gson;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerMainActivityComponent.create().inject(this);
String jsonData = "{'name':'zhangwuji','age':20}";
Man man = gson.fromJson(jsonData,Man.class);
}
}

No4:

@Named、@Qualifier

@Module
public class EngineModule{
@Provides
@Named("Gasoline")
public Engine provideGasoline(){
return new GasolineEngine();
}
@Provides
@Named("Diesel")
public Engine provideDiesel(){
return new DieselEngine();
}
}

调用

public class Car{
private Engine engine;
@Inject
public Car(@Named("Diesel") Engine engine){
this.engine = engine;
}
public String run(){
return engine.work();
}
}

-------------------------------------

@Qualifier
@Retention(RUNTIME)
public @interface GasoLine{
} @Qualifier
@Retention(RUNTIME)
public @interface Diesel{
}
@Module
public class EngineModule{
@Provides
@Gasonline
public Engine provideGasoline(){
return new GasolineEngine();
}
@Provides
@Diesel
public Engine provideDiesel(){
return new DieselEngine();
}
}
public class Car{
private Engine engine;
@Inject
public Car(@Gasoline Engine engine){
this.engine = engine;
}
public String run(){
return engine.work();
}
}

No5:

 @Singleton、@Scope

@Inject
Gson gson;
@Inject
Gson gson1;
@Module
public class GsonModule{
@Singleton
@Provides
public Gson provideGson(){
return new Gson();
}
}
@Singleton
@Component(modules = GsonModule.class)
public interface MainActivityComponent{
void inject(MainActiviy activity);
}

调用

public class MainActivity extends AppCompatActivity{
private static final String TAG="Dagger2";
@Inject
Gson gson;
@Inject
Gson gson1;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerMainActivityComponent.create().inject(this);
}
}

-----------------------------

@Scope
@Documented
@Retention(RUNTIME)
public @interface Singleton{}
@Scope
@Rentention(RUNTIME)
public @interface ApplicationScope{}
@Module
public class GsonModule{
@ApplicationScope
@Provides
public Gson provideGson(){
return new Gson();
}
}
@ApplicationScope
@Component(modules=GsonModule.class)
public interface ActivityComponent{
void inject(MainActivity activity);
void inject(SecondActivity activity);
}
public class App extends Application{
ActivityComponent activityComponent;
@Override
public void onCreate(){
super.onCreate();
activityComponent = DaggerActivityComponent.builder().build();
}
public static App get(Context context){
return (App)context.getApplicationContext();
}
ActivityComponent getActivityComponent(){
return activityComponent;
}
}

调用

public class MainActivity extends AppCompatActivity{
private static final String TAG="Dagger2";
private Button bt_jump;
@Inject
Gson gson;
@Inject
Gson gson1;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
App.get(MainActivity.this).getActivityComponent().inject(this);
onClick();
}
private void onClick(){
bt_jump = (Button)findViewById(R.id.bt_jump);
bt_jump.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
}

No6:

@Component

public class Swordsman{
@Inject
public Swordsman{
}
public String fighting(){
return "欲为大树,莫与草争";
}
}
@Module
public class SwordsmanModule{
@Provides
public Swordsman provideSwordsman(){
return new Swordsman();
}
} @Component(modules = SwordsmanModule.class)
public interface SwordsmanComponent{
Swordsman getSwordsman();
}
@ApplicationScope
@Component(modules = GsonModule.class,dependencies = SwordsmanComponent.class)
public interface ActivityComponent{
void inject(MainActivity activity);
void inject(SecondActivity activity);
}
public class App extends Application{
ActivityComponent activityComponent;
@Override
public void onCreate(){
super.onCreate();
activityComponent = DaggerActivityComponent.builder();
swordsmanComponent(DaggerSwordsmanComponent.builder().build()).build();
}
public static App get(Context context){
return (App)context.getApplicationContext();
}
ActivityComponent getActivityComponent(){
return activityComponent;
}
}

调用

public class SecondActivity extends AppCompatActivity{
@Inject
Swordsman swordsman;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
App.get(SecondActivity.this).getActivityComponent().inject(this);
String sd = swordsman.fighting(;
}
}

No7:

懒加载:在@Inject的时候不初始化,而是使用的时候,调用get方法来获取实例

public class SecondActivity extends AppCompatActivity{
private static final String TAG="Dagger2";
@Inject
Lazy<Swordsman> swordsmanLazy;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
App.get(SecondActivity.this).getActivityComponent().inject(this);
Swordsman swordsman = swordsmanLazy.get();
swordsman.fighting();
String sd1 = swordsman.fighting();
}
}

《Android进阶之光》--Dagger2的更多相关文章

  1. 《Android进阶之光》--注解与依赖注入框架

    No1: 标准注解: 1)@Override:覆写 2)@Deprecated:过时 3)@SuppressWarnings:取消警告 4)@SafeVarargs:申明使用了可变长度参数的方法 No ...

  2. [置顶] 曙光到来,我的新书《Android进阶之光》已出版

    独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...

  3. 《Android进阶之光》--Material Design

    接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...

  4. 《Android进阶之光》--Android新特性

    Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...

  5. Android进阶之光-第1章-Android新特性-读书笔记

    第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...

  6. 《Android进阶之光》--事件总线

    No1: EventBus三要素: 1)Event:事件 2)Subscriber:事件订阅者 3)Publisher:事件发布者 No2: EventBus的4种ThreadMode(线程模型): ...

  7. 《Android进阶之光》--ButterKnife

    No1: 添加依赖库 Project的build.gradle文件添加 buildscript{ ... dependencies{ ... classpath 'com.neenbedankt.gr ...

  8. 《Android进阶之光》--RxJava

    No1: RxJava使用 dependencies{ compile 'io.reactivex:rxjava:1.2.0' compile 'io.reactivex:rxandroid:1.2. ...

  9. 《Android进阶之光》--RxJava实现RxBus

    事件总线RxBus,替代EventBus和otto 1)创建RxBus public class RxBus{ private static volatile RxBus rxBus; private ...

随机推荐

  1. 第18月第16天 statusBar

    1. 我们都知道要改状态栏statusBar的颜色很简单,只要如下一行代码就可以, [[UIApplicationsharedApplication]setStatusBarStyle:UIStatu ...

  2. 在css中控制图像的大小

    可在CSS中利用width属性和height属性控制一个图像得到大小,就像控制其他任何盒子的大小一样. <html> <head> <title>TODO supp ...

  3. FPN 学习笔记

    通常,利用网络对物体进行检测时,浅层网络分辨率高,学到的是图片的细节特征,深层网络,分辨率低,学到的更多的是语义特征. 1).通常的CNN使用如下图中显示的网络,使用最后一层特征图进行预测 例如VGG ...

  4. HTTP协议中PUT和POST使用上的区别

    有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一 ...

  5. manjaro 的配置

    一.更新源的配置: 1).自动方法: 在 终端 执行下面的命令从官方的源列表中对中国源进行测速和设置 sudo pacman-mirrors -c China 2).手动方法 自动方法(上面的方法1, ...

  6. 数据库的连接使用——使用ADO.NET连接数据库

    一.ADO.NET简介 ADO.NET是由很多类组成的一个类库,这些类库提供了很多对象,用来完成数据的连接.查询.插入.更新和删除等操作.其中主要包括以下对象: 1.Connection对象:用来连接 ...

  7. 红黑树与AVL树

    概述:本文从排序二叉树作为引子,讲解了红黑树,最后把红黑树和AVL树做了一个比较全面的对比. 1 排序二叉树 排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索. 排序二叉树 ...

  8. CSS导航条nav简单样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. hostapd 和 wap_supplicant

    hostapd : user space daemon for access points, including, e.g., IEEE 802.1X/WPA/EAP Authenticator fo ...

  10. log4j2配置文件log4j2.xml

    原地址:https://www.cnblogs.com/hafiz/p/6170702.html 1.关于配置文件的名称以及在项目中的存放位置 log4j 2.x版本不再支持像1.x中的.proper ...