架构进阶,Dagger2的原理及使用详解

本文详细介绍了Dagger2,一个强大的依赖注入框架,用于降低Android应用的耦合度。文章从Dagger2的基本概念、使用方法,包括引入依赖、创建Module和Component,到高级用法如构造方法的依赖、@Named和@Singleton注解的使用,以及自定义Scoped和Subcomponent。同时,还探讨了Dagger2在MVP架构中的应用和常见问题的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

  • 一:Dagger2是什么?
  • 二:为什么要有Dagger2
  • 三:Dagger2如何使用
  1. 基本的概念
  2. 如何使用Dagger2
  3. 高级用法

(1)构造方法需要其他参数时候
(2) 模块之间的依赖关系
(3) @Named注解使用
(4) @Singleton注解
(5)自定义Scoped
(6)Subcomponent
(7)lazy 和 Provider

  • 四: MVP + Dagger2

Ps:文末有架构师进阶资料和面试题资料

一:Dagger2是什么?

是一个依赖注入框架,butterknife也是一个依赖注入框架。不过butterknife,最多叫奶油刀,Dagger2被叫做利器啊,他的主要作用,就是对象的管理,其目的是为了降低程序耦合。

# 二:为什么要有Dagger2

下面我就手写了
public class A {
 public void eat() {
 System.out.print("吃饭了");
 }
}

使用的时候我们就要

A a = new A();
a.eat();

如果现在改了,早A的构造方法中必须传入B对象

 public class A {
 private B b;
 public A(B b) {
 this.b = b;
 }
 public void eat() {
 System.out.print("吃饭了");
 }
}

那么使用的时候

A a = new A(new B());
a.eat();

可能就有人说了,不就加一个对象么,这里只是我举的一个很简单的例子,看的感觉很简单,但是在实际开发中,如果现在改了一个这个构造方法。是不是意味着,整个项目中的都的改,一不小心, 就是BUG 啊

三:Dagger2如何使用

1. 基本的概念

上来给你说,怎么玩,肯定懵逼,这里我简单说一下几个概念,想有个认知,在往下看,会好很多,Dagger 是通过@Inject使用具体的某个对象,这个对象呢,是由@Provides注解提供,但是呢,这个@Provides只能在固定的模块中,也就是@Module注解,我们查找的时候,不是直接去找模块,而是去找@Component

我们反向推导,当我们使用

@Inject
A a

想要获取a对象的示例的时候,Dagger2 会先去找,当前Activity或者Fragment所连接的桥梁,例如上图中,连接的只有一个桥梁,实际上可以有多个,这个桥梁,会去寻找他所依赖的模块,如图中,依赖了模块A,和模块B,然后在模块中,会去寻找@Providers注解,去寻找A的实例化对象。

2. 如何使用Dagger2
(1) 引入依赖库

Dagger2官网

compile 'com.google.dagger:dagger:2.11'
 annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
(2) 创建Moudule
//第一步 添加@Module 注解
@Module
public class MainModule {
}
(3)创建具体的示例
//第一步 添加@Module 注解
@Module
public class MainModule {
 //第二步 使用Provider 注解 实例化对象
 @Provides
 A providerA() {
 return new A();
 }
}
(4)创建一个Component
//第一步 添加@Component
//第二步 添加module
@Component(modules = {MainModule.class})
public interface MainComponent {
 //第三步 写一个方法 绑定Activity /Fragment
 void inject(MainActivity activity);
}
(5)Rebuild Project

然后AS 会自动帮我们生成一个

开头都是以Dagger开始的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值