You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// dagger/java/dagger/internal/codegen/Scopes.java/** Returns all of the associated scopes for a source code element. */staticImmutableSet<Scope> scopesOf(Elementelement) {
returnAnnotationMirrors.getAnnotatedAnnotations(element, javax.inject.Scope.class)
.stream()
.map(Scope::scope)
.collect(toImmutableSet());
}
Dagger2 Scope
Dagger2 使用注解处理器在运行时生成代码完成依赖注入的功能。
Key Concept
Process
利用 Annotation Processor Tool 在编译时处理
@Component
注解的 Interface。Annotation 就是一个携带信息的标记,在处理注解时,可以通过读取 Annotation 中携带的信息,得知生成 Component 时所需的依赖 Module。
Component 组合各种 Module 对外提供依赖注入能力。 Module 提供实际的对象生产能力。
自定义 Scope
类似于文档,提供一个更加直观的生命周期说明。但是并不对应特殊实现,具体实现交给开发者。
便于处理依赖之间的生命周期关系。
因为 Dagger2 中的 Scope 保证的是 Component 和 生成的依赖对象的生命周期相同,所以自定义 Scope 提供了类似 Lint 的功能,一旦 Component 声明的生命周期和 Module 中声明的 Scope 不同,编译时就会报错,起到检测的作用。
Dagger 如何知道 Scope 是自定义的
Href
johnnyshieh.me
薛瑄的博客
The text was updated successfully, but these errors were encountered: