@Inject аннотированный конструктор без определенной области

#java #dagger-2

#java #кинжал-2

Вопрос:

Есть класс с @Inject аннотированным constructor , но без Scope определенного. Чему Scope он будет принадлежать после введения?

 // No scope
public class A {

@Inject public A() {}

}
 

Ответ №1:

Класс / привязка будут недоступны, и для каждой инъекции будет создаваться новый экземпляр.

Dagger позволяет привязывать неохваченные зависимости в любом компоненте, независимо от области видимости компонента:

  • Любой тип с конструктором @Inject, который не ограничен или имеет аннотацию @Scope, соответствующую одной из областей компонента

Когда классам или компонентам назначена допустимая область видимости, они отслеживают время жизни компонента, в котором они объявлены, в соотношении 1: 1:

Поскольку Dagger 2 связывает экземпляры с областью видимости в графе с экземплярами реализаций компонентов, самим компонентам необходимо объявить, какую область они намерены представлять. Например, не имеет никакого смысла иметь привязку @Singleton и привязку @RequestScoped в одном компоненте, потому что эти области имеют разные жизненные циклы и, следовательно, должны находиться в компонентах с разными жизненными циклами.

Иными словами, если вы рассматриваете области видимости как «условия, при которых экземпляр сохраняется и используется повторно», где @Singleton означает «всегда сохранять или повторно использовать этот экземпляр», а @RequestScoped означает «сохранять или повторно использовать этот экземпляр в рамках одного запроса (до тех пор, пока существует компонент с областью действия запроса)», тоunscoped эффективно означает «никогда не сохранять и не использовать этот экземпляр повторно».