《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 ...
随机推荐
- 【Elasticsearch】Elasticsearch在windows下的安装方法
版本 elasticsearch-2.4.4 2.4.4版本下载地址 下载地址1 下载地址2 启动 进入bin目录,双击elasticsearch.bat: 在浏览器中输入http://localho ...
- saltstack系列~第四篇
简介 针对mysql的sls编写0 软件包推送部分 tool_rsync: file.recurse: - source: salt://files/mysql ...
- Struts自定义拦截器&拦截器工作原理
0.拦截器的调用原理: 拦截器是一个继承了序列化接口的普通接口.其工作原理是讲需要被拦截的对象作为参数传到intercept()方法内,在方法内部对此对象进行处理之后再执行原方法.intercept( ...
- 复制vmware主机修改网卡
https://blog.csdn.net/gui951753/article/details/79491092
- atof()函数 atol()
atof()函数 atof():double atof(const char *str ); 功 能: 把字符串转换成浮点数 str:要转换的字符串. 返回值:每个函数返回 double 值,此值由将 ...
- IDEA常用快捷键和常用插件集成,持续更新......
用习惯了eclipse,不容易转过来,记一下! 快捷键 psvm: main 方法快捷键 sout :syso快捷键 CTRL+O: 重写父类方法 Ctrl+Alt+V :自动补全返回值 Ctrl+S ...
- .NET中制做对象的副本(二)继承对象之间的数据拷贝
定义学生 /// <summary> /// 学生信息 /// </summary> public class Student { /// <summary> // ...
- MFC_CFileDialog_选择文件夹
场景 在MFC中有时候只需要选择一个文件夹而不需要选择文件,这时候可以通过下列方式来进行选择 技术点 BROWSEINFO typedef struct_browseinfo { HWND hwndO ...
- Python中的元类
从前面"Python对象"文章中了解到,在Python中一切都是对象,类可以创建实例对象,但是类本身也是对象. class C(object): pass c = C() prin ...
- 命令查看WebSphere MQ运行状态
参考:https://wenku.baidu.com/view/34e40e2ffd0a79563c1e72b9.html 一.查看队列管理器运行状态 # dspmq 显示结果中QMNAME表示MQ队 ...