有一个@Inject
注释constructor
但没有定义Scope
的课程。注射后它会属于Scope
什么?
// No scope
public class A {
@Inject public A() {}
}
答案 0 :(得分:0)
类/绑定将 unscoped ,并且每次注入都会创建一个新实例。
Dagger允许无范围的依赖关系为bound in any component,无论组件的范围如何:
- 具有@Inject构造函数的任何类型,该构造函数是未作用域的,或者具有与组件范围之一匹配的@Scope注释
当类或组件做具有分配给它们的有效范围时,它们会以1:1跟踪它们被声明的组件的生命周期:
由于Dagger 2将图中的范围实例与组件实现的实例相关联,因此组件本身需要声明它们要表示的范围。例如,在同一个组件中使用@Singleton绑定和@RequestScoped绑定没有任何意义,因为这些范围具有不同的生命周期,因此必须存在于具有不同生命周期的组件中。
换句话说,如果您将范围视为“保存和重用实例的条件”,其中@Singleton表示“始终保留或重用此实例”,而@RequestScoped意味着“在同一请求中保留或重用此实例”(只要请求范围的组件存在)“,那么 unscoped 实际上意味着”永远不会保留或重用此实例“。