《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{
@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的更多相关文章
- 《Android进阶之光》--注解与依赖注入框架
No1: 标准注解: 1)@Override:覆写 2)@Deprecated:过时 3)@SuppressWarnings:取消警告 4)@SafeVarargs:申明使用了可变长度参数的方法 No ...
- [置顶]
曙光到来,我的新书《Android进阶之光》已出版
独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...
- 《Android进阶之光》--Material Design
接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...
- 《Android进阶之光》--Android新特性
Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...
- Android进阶之光-第1章-Android新特性-读书笔记
第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...
- 《Android进阶之光》--事件总线
No1: EventBus三要素: 1)Event:事件 2)Subscriber:事件订阅者 3)Publisher:事件发布者 No2: EventBus的4种ThreadMode(线程模型): ...
- 《Android进阶之光》--ButterKnife
No1: 添加依赖库 Project的build.gradle文件添加 buildscript{ ... dependencies{ ... classpath 'com.neenbedankt.gr ...
- 《Android进阶之光》--RxJava
No1: RxJava使用 dependencies{ compile 'io.reactivex:rxjava:1.2.0' compile 'io.reactivex:rxandroid:1.2. ...
- 《Android进阶之光》--RxJava实现RxBus
事件总线RxBus,替代EventBus和otto 1)创建RxBus public class RxBus{ private static volatile RxBus rxBus; private ...
随机推荐
- string字符串js操作
String 对象方法 方法 描述 anchor() 创建 HTML 锚. big() 用大号字体显示字符串. blink() 显示闪动字符串. bold() 使用粗体显示字符串. charAt() ...
- adb环境变量配置
针对win10系统: 搜索“高级系统设置”,点击“环境变量”按钮: 找到“path”双击: 双击“path”,在弹出的环境变量列表中新建,填入adb的文件路径 检查配置是否成功,运行命令adb,出现如 ...
- SRS+flv.js打造兼容性较高的直播、点播平台
**************************************************************************************************** ...
- libSVM在matlab下的使用安装
1) 从LIBSVM的官网http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下载最新版本的LIBSVM,当前版本为libsvm-3.18.zip 2) 解压压缩包到电 ...
- 董事局主席董事长总裁首席执行官CEO总裁董事监事区别
董事长是公司的最大股东:董事长是董事会的主席,一般是企业的所有者,掌握企业的股权并且决定企业的发展策略. 董事局主席通常是在大财团中才会出现,董事局主席管数个董事长,一个大财团涉及很多方面的业务,因此 ...
- 【转】 Linux常用文件操作命令
1 改变目录 要进入相应的目录我们可以使用Linux下的改变目录命令cd (ChangeDirectory). 下面我要进入到/tmp目录下,如下操作: [root@bestlinux ~]# cd ...
- 详解.NET IL代码(一)
本文主要介绍IL代码,内容大部分来自网上,进行整理合并的. 一.IL简介 为什么要了解IL代码? 如果想学好.NET,IL是必须的基础,IL代码是.NET运行的基础,当我们对运行结果有异议的时候,可以 ...
- WallPaper
LiveWallPaper 动态壁纸是从Android2.1就开始带有的一个新的特性.它让我们能够将本来毫无生气的静态的手机屏幕背景替换成 从 随着音乐的活力和脉动而跳跃的声线 到 手指抚过能激起阵阵 ...
- 常用adb操作命令详解
1. 查看当前运行的所有设备adb devices 返回当前设备列表 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示2. 安装软件adb install验证是否 ...
- Python最佳学习路线图
python语言基础(1)Python3入门,数据类型,字符串(2)判断/循环语句,函数,命名空间,作用域(3)类与对象,继承,多态(4)tkinter界面编程(5)文件与异常,数据处理简介(6)Py ...