《Android进阶之光》--Dagger2
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相关推荐
- Android进阶三部曲 第一部《Android进阶之光》已出版(内含勘误)
独立博客版本请点击这里 勘误帖请点击这里 源码地址:https://github.com/henrymorgen/android-advanced-light 进阶三部曲第二部:http://liuw ...
- 进阶三部曲第一部《Android进阶之光》第2版已出版
本文首发于微信公众号「刘望舒」 其实<Android进阶之光>第二版已经在2021年4月就出版了,但是今天才发现,我去,没在CSDN发文,今天补上~~ 以下是正文 其实不打算出<An ...
- 《android进阶之光》——事件总线(上)
今日阅读:<android进阶之光>的事件总线部分,整理如下 事件总线知识点: 1.EventBus:就是事件,可以是任意对象 2.Subscriber:事件的订阅者 3.Publishe ...
- 《Android进阶之光》Horizontal 读书笔记
<Android进阶之光>Horizontal 读书笔记 public class HorizontalView extends ViewGroup {private int lastIn ...
- 《Android进阶之光》续作内容简介
<Android进阶之光>续作的书名现在还没有定,目前已经完稿,预计会在9月出版.本书基于Android8.0,理念和<Android开发艺术探索>相近,是将源码和应用开发相结 ...
- Android进阶之光 读书笔记
第一章, Android 5.6.7新特性 1.RecycleView的自定义分割线 public class DividerItemDecoration extends RecycleView.It ...
- android进阶之光!一次哔哩哔哩面试经历,灵魂拷问
开头 我准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司. 谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去, ...
- 【Android 进阶】Dagger2 系列:入门案例一
欢迎关注我的微信公众号,不只是原创技术分享,更多的是生活的思考和总结. 介绍 A fast dependency injector for Android and Java. 一个在 Android ...
- Android进阶之光读书笔记——第三章:View体系与自定义View
第三章 View体系与自定义View 本章将介绍Android中十分重要的View,在多本书中View是必讲的一节,Android群英传就讲了不少的View的知识,那么在这里我们再去复习一遍吧 3.1 ...
- java中List遍历删除元素,Android进阶之光
一.结缘 实话说,最开始刷题的时候,刷的是 LeetCode,后来才注意到了剑指 offer 的存在,最开始也是听别人说的,剑指 offer 在面试过程中出现的概率很大,就去尝试将其都做了一遍,做的过 ...
最新文章
- python一般用来开发什么-python主要用来做什么?Python开发简单吗?
- 计算机网络第二章-物理层
- Vmware vSphere 十个疑难问题解决方法
- 高并发情况下修改系统参数
- HTML转义字符最全集合
- woocommerce修改商品详情页
- glide加载gif图不显示动画_Android使用glide加载gif动画设置播放次数
- crt测试显示器软件,MonitorTest(显示器性能测试软件)
- 智能座舱HIL测试台架集群搭建的必要性
- 河南师范大学计算机学院地址,河南师范大学校区有几个 地址是什么
- 如何同时登陆局域网和互联网?
- C++ 机房预约系统
- 家用无盘服务器打游戏,开20台的电竞网咖酒店,无盘服务器用千兆网卡够用吗?...
- FNN模糊神经网络——信息系统客户服务感知评价
- 表妹想学编程,我给她看了一张图,看完后她说还是算了吧,不学了
- swin-Transformer论文详解
- “Ipad Mini 12月7日在国内上市时都需要摇号预订
- excel 合并行列单元格
- 解读用车三大误区 拉高速/添加剂/自动挡使用
- 使用Batch管理VHD