《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 ...
随机推荐
- 第16月第17天 contentMode
1. self.contentMode = UIViewContentModeScaleAspectFill; self.clipsToBounds = YES; http://blog.csdn.n ...
- pygame(class类)调用视图的方法
以下将介绍pygame精灵动画的基础知识,希望对大家有帮助:1.在此,精灵类必须继承pygame.sprite.Sprite并初始化pygame.sprite.Sprite.__init__(self ...
- Navicat Premium连接各种数据库
版本信息 Navicat Premium 是一套数据库开发工具,让你从单一应用程序中同时连接 MySQL.MariaDB.SQL Server.Oracle.PostgreSQL 和 SQLite 数 ...
- Java调整JVM内存大小——(八)
JVM内存大小是有限的,有的时候程序过大时候会导致超出最大内存,产生下面异常: Exception in thread "main" java.lang.OutOfMemoryEr ...
- SpringMVC使用HttpInvoker发布远程服务
参考这篇文章https://www.cnblogs.com/fanqisoft/p/10283156.html 将提供者配置类中的 1 @Bean 2 public HessianServiceExp ...
- 【vim】保存文件并退出 :w=:wq
这两个命令实际上并不完全等价,当文件被修改时两个命令时相同的.但如果未被修改,使用 :x 不会更改文件的修改时间,而使用 :wq 会改变文件的修改时间.
- 【转】C++的const类成员函数
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如, const char blank=' '; blank='\n'; //错误 面向对象程序设计中 ...
- Tomcat启动项目时内存溢出问题如何解决
在Eclipse中,内存溢出(报不能创建JAVA虚拟机错时,也可能是这里配错了.) 1.双击Tomcat,点击Open launch configuration,Arguments, 2.在VM ar ...
- 为cobbler自动化安装系统工具添加epel源
关于cobbler的安装及部署,参考:CentOS 6.5自动化运维之基于cobbler服务的自动化安装操作系统详解http://blog.csdn.net/reblue520/article/det ...
- Python-html css 盒模型
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>ht ...