Android中使用Dagger2进行依赖注入
2016-05-23 15:31
489 查看
Dagger2是首个使用生成代码实现完整依赖注入的框架,极大减少了使用者的编码负担,本文主要介绍如何使用Dagger2进行依赖注入。
module的build.gradle添加
Module其实就是一个依赖的制造工厂。我们只需要为其添加制造依赖的方法即可。
注解@Module注明本类属于Module ,注解@Provides注明该方法是用来提供依赖对象的特殊方法 。
一个完整的Module必须拥有@Module与@Provides注解 。
Component就是一个将Module生成的实例注入Container中的注入器
@Component使用modules指向使用的Module的集合。 所有的Component都必须以接口形式定义。Dagger2框架将自动生成Component的实现类,对应的类名是Dagger×××××,这个例子中对应的实现类是DaggerActivityComponent,添加注入方法,一般使用inject做为方法名,方法参数为对应的Container。
Container就是可以被注入依赖关系的容器,这里的容器为Activity。具体实现如下
Container中@Inject标记需要被注入的对象,mActivityComponent.inject(this)表示将调用Component的实现类将Module的生成的对象注入到mUserModel中。
到这为止,怎样使用Dagger2进行依赖注入的小demo已经完成了,代码已经上传到Github。
欢迎大家关注我的微信公众号,我会不定期的分享些Android开发的技巧
Dagger2简单介绍
Dagger2,起源于Square的Dagger,是一个完全在编译期间进行的依赖注入框架,完全去除了反射。Dagger2是通过依赖注入让你少写很多公式化代码,更容易测试,降低耦合,创建可复用可互换的模块。Dagger2实例
Dagger2环境搭建
project的build.gradle添加dependencies { ... // 其他classpath classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //添加apt命令 }
module的build.gradle添加
apply plugin: 'com.neenbedankt.android-apt'//添加apt命令 dependencies { apt 'com.google.dagger:dagger-compiler:2.0.2' //指定注解处理器 compile 'com.google.dagger:dagger:2.0.2' //dagger公用api provided 'org.glassfish:javax.annotation:10.0-b28' //添加android缺失的部分javax注解 }
代码实现
Usermodele 是一些基本消息public class UserModel { private String id; private String name; private String gender; public UserModel() { } public UserModel(String id, String name, String gender) { this.id = id; this.name = name; this.gender = gender; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
Module其实就是一个依赖的制造工厂。我们只需要为其添加制造依赖的方法即可。
@Module public class ActivityModule { @Provides public UserModel provideUserModel() { return new UserModel("1", "hjx", "man"); } }
注解@Module注明本类属于Module ,注解@Provides注明该方法是用来提供依赖对象的特殊方法 。
一个完整的Module必须拥有@Module与@Provides注解 。
Component就是一个将Module生成的实例注入Container中的注入器
@Component(modules = ActivityModule.class) public interface ActivityComponent { void inject(MainActivity mainActivity); }
@Component使用modules指向使用的Module的集合。 所有的Component都必须以接口形式定义。Dagger2框架将自动生成Component的实现类,对应的类名是Dagger×××××,这个例子中对应的实现类是DaggerActivityComponent,添加注入方法,一般使用inject做为方法名,方法参数为对应的Container。
Container就是可以被注入依赖关系的容器,这里的容器为Activity。具体实现如下
public class MainActivity extends AppCompatActivity { private ActivityComponent mActivityComponent; @Inject UserModel mUserModel; //不能为private @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mActivityComponent = DaggerActivityComponent.builder(). activityModule(new ActivityModule()).build(); mActivityComponent.inject(this); ((TextView) findViewById(R.id.textView)). setText("ID:" + mUserModel.getId() + " Name: " + mUserModel.getName() + " Gender: " + mUserModel.getGender()); } }
Container中@Inject标记需要被注入的对象,mActivityComponent.inject(this)表示将调用Component的实现类将Module的生成的对象注入到mUserModel中。
到这为止,怎样使用Dagger2进行依赖注入的小demo已经完成了,代码已经上传到Github。
欢迎大家关注我的微信公众号,我会不定期的分享些Android开发的技巧
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories