@Inject带注释的构造函数,没有定义Scope

时间:2016-10-13 19:49:07

标签: java dagger-2

有一个@Inject注释constructor但没有定义Scope的课程。注射后它会属于Scope什么?

// No scope
public class A {

@Inject public A() {}

}

1 个答案:

答案 0 :(得分:0)

类/绑定将 unscoped ,并且每次注入都会创建一个新实例。

Dagger允许无范围的依赖关系为bound in any component,无论组件的范围如何:

  
      
  • 具有@Inject构造函数的任何类型,该构造函数是未作用域的,或者具有与组件范围之一匹配的@Scope注释
  •   

当类或组件具有分配给它们的有效范围时,它们会以1:1跟踪它们被声明的组件的生命周期:

  

由于Dagger 2将图中的范围实例与组件实现的实例相关联,因此组件本身需要声明它们要表示的范围。例如,在同一个组件中使用@Singleton绑定和@RequestScoped绑定没有任何意义,因为这些范围具有不同的生命周期,因此必须存在于具有不同生命周期的组件中。

换句话说,如果您将范围视为“保存和重用实例的条件”,其中@Singleton表示“始终保留或重用此实例”,而@RequestScoped意味着“在同一请求中保留或重用此实例”(只要请求范围的组件存在)“,那么 unscoped 实际上意味着”永远不会保留或重用此实例“。