<commit_before>---
layout: post
title: Dagger 2 思路学习
category: 技术
date:   2016-03-16 22:22:11
catalog:  true
tags:
    - Dagger2
description: Dagger2
---



## 引言

 本文是在熟悉 Dagger 2 用法的基础上，解读 Dagger 2 的生成代码，根据代码来说明官方文档中的有些约定、概念的起源，暂不研究如何生成代码的 compiler 部分。

### 框架与注解

现在有很多框架均借助于注解和注解处理工具，如 大名鼎鼎的 Butterknife、Dagger 2、Retrofit ，或者是在 Java 代码之外补充完善元数据，或者是把注解当作一种标记来生成满足特定需求的模式化代码。

Dagger 2 的主要特点是：使用了一系列如`@Module`、`@Component` 、`@Provides`等注解，表明程序中的对象依赖关系，代替我们手写、生成能表示这种关系的代码，使得我们对依赖注入关系的校验可以从运行时前移到编译期。

### Dagger 2 中的几个概念

- Binding

Dagger2 中把依赖类型为 binding，比如下文中的 D1、D2 类型

- Module

为对象依赖图提供所依赖的 binding 类型的实例的类。

可以认为 Module 类的角色是上游的依赖生产工厂，不直接对需求依赖的下游用户代码开放。
<commit_msg>update blogs,modify writing date<commit_after>---
layout: post
title: Dagger 2 思路学习
category: 技术
date:   2017-03-16 22:22:11
catalog:  true
tags:
    - Dagger2
description: Dagger2
---



## 引言

 本文是在熟悉 Dagger 2 用法的基础上，解读 Dagger 2 的生成代码，根据代码来说明官方文档中的有些约定、概念的起源，暂不研究如何生成代码的 compiler 部分。

### 框架与注解

现在有很多框架均借助于注解和注解处理工具，如 大名鼎鼎的 Butterknife、Dagger 2、Retrofit ，或者是在 Java 代码之外补充完善元数据，或者是把注解当作一种标记来生成满足特定需求的模式化代码。

Dagger 2 的主要特点是：使用了一系列如`@Module`、`@Component` 、`@Provides`等注解，表明程序中的对象依赖关系，代替我们手写、生成能表示这种关系的代码，使得我们对依赖注入关系的校验可以从运行时前移到编译期。

### Dagger 2 中的几个概念

- Binding

Dagger2 中把依赖类型为 binding，比如下文中的 D1、D2 类型

- Module

为对象依赖图提供所依赖的 binding 类型的实例的类。

可以认为 Module 类的角色是上游的依赖生产工厂，不直接对需求依赖的下游用户代码开放。

{'fraction_non_alphanumeric': 0.09422936449963477, 'fraction_numerical': 0.036523009495982466, 'mean_word_length': 6.061855670103093, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3853847', 'n_tokens_mistral': 973, 'n_tokens_neox': 1058, 'n_words': 115}