关于Dagger2的使用心得
2017-10-14 23:42
288 查看
Dagger2
Github主页: https://github.com/google/dagger历史:
Dagger1是由Square公司受到Guice(https://github.com/google/guice)启发创建的依赖注入框架.
Dagger2是Dagger1(https://github.com/square/dagger)的分支,由谷歌开发.该项目受到了Auto项目(https://github.com/google/auto)的启发
优点
没有使用反射,图的验证、配置和预先设置都在编译的时候执行
容易调试,完全具体地调用提供和创建的堆栈
更高的性能,谷歌声称他们提高了13%的处理性能
代码混淆,使用派遣方法,就如同自己写的代码一样
配置:
1. 在project/build.gradle 文件中添加android-apt 插件 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 2. 在app/build.gradle 文件中添加如下依赖 apply plugin: 'com.neenbedankt.android-apt' dependencies { compile 'com.google.dagger:dagger:2.4' // dagger 2 的配置 apt 'com.google.dagger:dagger-compiler:2.4' compile 'org.glassfish:javax.annotation:10.0-b28' // 添加java 注解库 }
主要的注解:
@Provides: 用来修饰方法,方法的返回类型就是所提供的依赖类型,可以简单的把方法的返回值理解为我们通常要new出来的对象.
// @Provides方法都会用provide作为前缀 @Provides public Application provideApplication() { return mApplication; }
@Module: 所有的@Provides方法都必须放到一个Moudle中,一个Moudle就是使用@Moudle修饰的类,可以简单的理解为一个持有各种对象的仓库.用来给@Component组件提供实例化的对象.Android中有三种Module:
ApplicationModule:分别提供整个应用级别的(只生成一个该组件的实例)
ActivityModule:Activity级别的
UserModule:用户级别的Module
// @Module类都用Module作为后缀 @Module public class AppModule { private Application mApplication; public AppModule(Application application){ this.mApplication = application; } @Provides public Application provideApplication() { return mApplication; } }
@Inject: 通常在需要依赖的地方使用这个注解,简单的理解为声明一个对象
@Inject protected T mPresenter;
@Component 它是@Inject和@Module的桥梁,它的主要作用就是连接这两个部分.我们必须用@Component注解一个接口,为该注解传入Module类,或者添加其依赖的组件
// @Component注解的接口或抽象类以Component为后缀 @Component(modules = {ApiModule.class}) public interface ApiComponent { void inject(MainActivity mainActivity); void inject(TestActivity testActivity); } // @Component注解的接口或抽象类,Dagger将会为该接口或者抽象类生成一个实现,这个实现的命名是在接口或抽象类前面加上Dagger,如ApiComponent生成的实现是DaggerApiComponent ApiComponent apiComponent = DaggerApiComponent.builder() .apiModule(new ApiModule()) .appModule(getAppModule()) .build();
@Scope: 用于自定义注解限定注解作用域。这是一个非常强大的特点,没必要让每个对象都去了解如何管理他们的实例
@Singleton : 代表各个注入对象为单例。
后话
Dagger2完整的例子及用法,大家可以参考我GitHub上的开源项目—>Framework
( 里面用到了:RxJava2 + Retrofit2 + Mvp + Dagger2 等框架,小伙伴们感觉不错的话欢迎star ^…^ )
相关文章推荐
- 关于CentOS系统使用心得
- 关于三层结构的一点使用心得与开发建议
- 原创:关于一些Java开发工具的使用心得(不断更新)
- C#关于"该进程无法访问文件,因为该文件正由另一进程使用"的错误的一点心得(示例)
- 关于使用Expression Blend的个人心得(附图)
- 关于emule的使用心得
- 关于.net的combobox的一点使用心得
- 关于Spring主题的使用心得
- 关于动态添加自定义控件的使用心得
- 一些关于Liferay的使用心得
- 关于水晶报表使用的一点心得
- 关于EnableViewState禁用与使用心得
- 关于linux内核源码使用的一点初步心得
- 关于struts:errors标签的几点使用心得和经验
- 关于OCMJ4*8B2LCD在MCU中的使用心得
- 关于ASP.NET中使用ViewState的心得。
- 关于一些Java开发工具的使用心得(不断更新)
- 关于EnableViewState禁用与使用心得
- 关于VB.NET中动态设置控件坐标的使用心得休会
- 关于嵌套使用DataList的心得[原创]