Dagger2使用(四)一个简单的Dagger依赖注入过程
来源:互联网 发布:code.org 是什么软件 编辑:程序博客网 时间:2024/06/08 16:02
实例为一个简单的Android应用,使用AndroidStudio;创建了一个BookModel,在activity中使用TextView显示该BookModel信息。
未使用Dagger的常规实现如下:
public class TestDaggerMainActivity extends BaseActivity { TextView mShowInfoView; BookModel mBook; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_dagger_main); // initDatas(); initViews(); showBookinfo(); } private void initDatas() { mBook = new BookModel("testBook", 25); } private void initViews() { mShowInfoView = (TextView)findViewById(R.id.showBookInfo_view); } private void showBookinfo() { mShowInfoView.setText(mBook.toString()); }}
public class BookModel { private String name; private float price; public BookModel() { } public BookModel(String name, float price) { this.name = name; this.price = price; } //getter setter省略 @Override public String toString() { return "[" + name + "\t" + price + "元]"; }}
1. 配置build.gradle
1)需要配置apt插件,没有这插件,dagger可能不会正常工作,特别是在Android studio中。
2)需要配置“javax.annotation”,Dagger2中会用到@Generated注解,而javax.anotation.generated在Android API 中没有。apply plugin: 'android-apt'//buildscript { repositories { jcenter() } dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }}//dependencies中的配置//for dagger2 apt 'com.google.dagger:dagger-compiler:2.0'compile 'com.google.dagger:dagger:2.0'// Dagger2中会用到@Generated注解,而javax.anotation.generated在Android API 中是没有.compile 'org.glassfish:javax.annotation:10.0-b28'
2. 构建依赖
Dagger2中,这个负责提供依赖的组件被称为Module。使用@Module标识类型为module,并用@Provides标识提供依赖的方法。
构建的ActivityModule代码如下所示。@Modulepublic class ActivityModule { @Provides BookModel provideUserModel() { return new BookModel("testBook", 25); }}
3. 构建Injector
连接提供依赖和消费依赖对象的组件被称为Injector;Dagger2中,我们将其称为Component。
Component是一个使用@Component标识的Javainterface。interface的inject方法需要一个消耗依赖的类型对象作为参数。
注意:这里必须是真正消耗依赖的类型TestDaggerMainActivity(实际的消耗依赖的类),而不可以写成其父类等。
ActivityComponent代码如下,代码编译后,会自动生成实现类“DaggerActivityComponent”,在构建依赖注入时需要用到。@Component(modules = ActivityModule.class)public interface ActivityComponent { void inject(TestDaggerMainActivity activity);}
4. 完成依赖注入
在TestDaggerMainActivity中构建Injector对象,完成注入。
注:BookModel mBook 不能定义为private。注:BookModel mBook 不能定义为private。
public class TestDaggerMainActivity extends BaseActivity { private ActivityComponent mActivityComponent; TextView mShowInfoView;// @Inject BookModel mBook; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_dagger_main); // initDatas(); initViews(); showBookinfo(); } private void initDatas() {//构建Injector对象及完成注入 mActivityComponent = DaggerActivityComponent.builder().activityModule(new ActivityModule()).build(); mActivityComponent.inject(this); } private void initViews() { mShowInfoView = (TextView)findViewById(R.id.showBookInfo_view); } private void showBookinfo() { mShowInfoView.setText(mBook.toString()); }}
阅读全文
0 0
- Dagger2使用(四)一个简单的Dagger依赖注入过程
- 【Android】【Dagger】Dagger2 依赖注入
- Android中的依赖注入:Dagger函数库的使用(一)
- Dagger 依赖注入的使用(DI)
- Android依赖注入库Dagger的使用
- 使用Dagger 2 依赖注入
- Dagger2使用(二)“依赖” “注入” 基本概念
- Dagger2使用(三)Dagger2依赖注入-注解说明
- Android依赖注入Dagger的使用和源码解析
- Dagger2----一个最简单的Dagger2依赖的实现
- SpringIoC依赖注入的过程(四)
- Android依赖注入Dagger的使用和源码解析(上篇)
- 使用Dagger 2依赖注入 - API
- 使用Dagger 2依赖注入 - DI介绍
- 使用Dagger 2依赖注入 - 自定义Scope
- 使用Dagger 2进行依赖注入
- 使用Dagger 2进行依赖注入
- 使用Dagger 2进行依赖注入
- 389. Find the Difference注意异或运算的巧妙使用^
- datatables
- Linux基础教程1
- UVA
- hibernate-7-缓存的初步了解
- Dagger2使用(四)一个简单的Dagger依赖注入过程
- 港科VINS-Mono系统学习(2) 预处理
- 7月13号贝贝网Android实习生面试心得
- iptables
- JavaEE开发之Spring中的多线程编程以及任务定时器详解(有源码)
- 基本概念 Basic concepts
- 剑指offer面试题51 数组中重复的数字
- VS2015中”This function or variable may be unsafe.”警告的解决办法
- 多重背包-可行性poj1742