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{@Injectpublic 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);//2
    watch.work();
}

No3:

@Module、@Provides

@Inject
Gson gson;

@Module
public class GsonModule{@Providespublic Gson provideGson(){return new Gson();}
}

@Component(modules = GsonModule.class)
public interface MainActivityComponent{void inject(MainActivity activity);
}

调用

public class MainActivity extends AppCompatActivity{@InjectGson gson;@Overrideprotected 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;@Injectpublic 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@Gasonlinepublic Engine provideGasoline(){return new GasolineEngine();}@Provides@Dieselpublic Engine provideDiesel(){return new DieselEngine();}
}

public class Car{private Engine engine;@Injectpublic 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@Providespublic 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";@InjectGson gson;@InjectGson gson1;@Overrideprotected 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@Providespublic 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;@Overridepublic 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;@InjectGson gson;@InjectGson gson1;@Overrideprotected 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(){@Overridepublic void onClick(View view){Intent intent = new Intent(MainActivity.this,SecondActivity.class);startActivity(intent);}});}
}

No6:

@Component

public class Swordsman{@Injectpublic Swordsman{}public String fighting(){return "欲为大树,莫与草争";}
}

@Module
public class SwordsmanModule{@Providespublic 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;@Overridepublic 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{@InjectSwordsman swordsman;@Overrideprotected 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";@InjectLazy<Swordsman> swordsmanLazy;@Overrideprotected 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();}
}

转载于:https://www.cnblogs.com/anni-qianqian/p/8559761.html

《Android进阶之光》--Dagger2相关推荐

  1. Android进阶三部曲 第一部《Android进阶之光》已出版(内含勘误)

    独立博客版本请点击这里 勘误帖请点击这里 源码地址:https://github.com/henrymorgen/android-advanced-light 进阶三部曲第二部:http://liuw ...

  2. 进阶三部曲第一部《Android进阶之光》第2版已出版

    本文首发于微信公众号「刘望舒」 其实<Android进阶之光>第二版已经在2021年4月就出版了,但是今天才发现,我去,没在CSDN发文,今天补上~~ 以下是正文 其实不打算出<An ...

  3. 《android进阶之光》——事件总线(上)

    今日阅读:<android进阶之光>的事件总线部分,整理如下 事件总线知识点: 1.EventBus:就是事件,可以是任意对象 2.Subscriber:事件的订阅者 3.Publishe ...

  4. 《Android进阶之光》Horizontal 读书笔记

    <Android进阶之光>Horizontal 读书笔记 public class HorizontalView extends ViewGroup {private int lastIn ...

  5. 《Android进阶之光》续作内容简介

    <Android进阶之光>续作的书名现在还没有定,目前已经完稿,预计会在9月出版.本书基于Android8.0,理念和<Android开发艺术探索>相近,是将源码和应用开发相结 ...

  6. Android进阶之光 读书笔记

    第一章, Android 5.6.7新特性 1.RecycleView的自定义分割线 public class DividerItemDecoration extends RecycleView.It ...

  7. android进阶之光!一次哔哩哔哩面试经历,灵魂拷问

    开头 我准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司. 谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去, ...

  8. 【Android 进阶】Dagger2 系列:入门案例一

    欢迎关注我的微信公众号,不只是原创技术分享,更多的是生活的思考和总结. 介绍 A fast dependency injector for Android and Java. 一个在 Android ...

  9. Android进阶之光读书笔记——第三章:View体系与自定义View

    第三章 View体系与自定义View 本章将介绍Android中十分重要的View,在多本书中View是必讲的一节,Android群英传就讲了不少的View的知识,那么在这里我们再去复习一遍吧 3.1 ...

  10. java中List遍历删除元素,Android进阶之光

    一.结缘 实话说,最开始刷题的时候,刷的是 LeetCode,后来才注意到了剑指 offer 的存在,最开始也是听别人说的,剑指 offer 在面试过程中出现的概率很大,就去尝试将其都做了一遍,做的过 ...

最新文章

  1. python一般用来开发什么-python主要用来做什么?Python开发简单吗?
  2. 计算机网络第二章-物理层
  3. Vmware vSphere 十个疑难问题解决方法
  4. 高并发情况下修改系统参数
  5. HTML转义字符最全集合
  6. woocommerce修改商品详情页
  7. glide加载gif图不显示动画_Android使用glide加载gif动画设置播放次数
  8. crt测试显示器软件,MonitorTest(显示器性能测试软件)
  9. 智能座舱HIL测试台架集群搭建的必要性
  10. 河南师范大学计算机学院地址,河南师范大学校区有几个 地址是什么
  11. 如何同时登陆局域网和互联网?
  12. C++ 机房预约系统
  13. 家用无盘服务器打游戏,开20台的电竞网咖酒店,无盘服务器用千兆网卡够用吗?...
  14. FNN模糊神经网络——信息系统客户服务感知评价
  15. 表妹想学编程,我给她看了一张图,看完后她说还是算了吧,不学了
  16. swin-Transformer论文详解
  17. “Ipad Mini 12月7日在国内上市时都需要摇号预订
  18. excel 合并行列单元格
  19. 解读用车三大误区 拉高速/添加剂/自动挡使用
  20. 使用Batch管理VHD

热门文章

  1. mac git 自动补全
  2. jQuery操作input值总结
  3. 当我谈缓存的时候,我谈些什么
  4. iOS进阶面试题----Block部分
  5. 标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号
  6. Luogu2617 Dynamic Rankings
  7. [数论] 快速傅里叶变换FFT
  8. js高级学习笔记(b站尚硅谷)-11-变量提升与函数提升
  9. ntpdate 时间同步
  10. wall 广播发送信息给所有user