架构进阶,Dagger2的原理及使用详解
https://www.jianshu.com/p/04d9db541155
解决Android 8.0和9.0无法获取SSID (unknow ssid)
https://blog.csdn.net/weixin_39706415/article/details/84571421
@Named @Scope @Inject @Provides注解提供,但是呢,这个@Provides只能在固定的模块中,也就是@Module注解,我们查找的时候,不是直接去找模块,而是去找@Component
->@Module
Activity / Fragment ->Component-> Module->Providers注解,去寻找A的实例化对象。
Providers注解,去寻找A的实例化对象。
->annotationProcessor compiler
@Module
MainModule
//第二步 使用Provider 注解 实例化对象
@Provides
void inject (MainActivity activity)
将Component与Activity/Fragment绑定关系
DaggerMainComponent.create.injectthis
3. 高级用法
(1)构造方法需要其他参数时候
@Module(includes = {45})
dependencies 依赖其他Component
一个Component 应用多个 module
dependencies 依赖其他Component
@Named注解使用
DaggerMainComponent.builder
.build.inject
(4) @Singleton注解
module Component
@Singleton
@Component
单利对象只能在同一个Activity中有效。不同的Activity 持有的对象不同
Scoped
Retention RUNTIME
DaggerMainComponent
.builder
.mainModule
.build
.add
.inject
this
PresentForName
lazy.get provider.get
其中Lazy(懒加载)的作用
Lazy component present get
procider(强制加载)
@Singleton
@Component ()
SplashPresenter,也就是启动页的Presneter,业务逻辑
SplashPresenter ,也就是启动页的Presneter,业务逻辑
@Provides
依赖注入框架 ----Dagger2 使用详解及源码分析
https://blog.csdn.net/zengke1993/article/details/80591427
依赖注入:
IoC不是一种技术
@Inject
Dagger就是一款基于Java注解实现完全在编译阶段完成依赖注入的开源库,
主要用于模块间解耦,提高代码的健壮性和可维护性。
Java注解实现 编译阶段完成 依赖注入
@Inject标记了的变量提供依赖。 @Module
@Module : 用于标记提供依赖的类(可以理解为仓库类,工厂类)
@Module
@Provides-> @Module
Component
DaggerComputerComponent
@Qualifier
@Qulifer : 用于自定义注解。被依赖对象被注入到依赖对象中时,依赖对象对被依赖对象的创建过程是不关心的。
Qualifier 用于自定义注解。被依赖对象被注入到依赖对象中时,依赖对象对被依赖对象的创建过程是不关心的。
这时使用@Qulifer来定义自己的注解,然后通过自定义注解去标注提供依赖的方法和依赖需求方,这样就可以精准地拿到所需要的被依赖实例。
@Scoped 限定注解作用域 实现局部单例的。
@SingleTon