Вопрос о внедрении зависимостей
Всем привет!
У меня есть несколько вопросов по механизму внедрения зависимостей в Java. Чтобы было понятнее постараюсь проиллюстрировать вопросы.
- Правильно ли я понимаю, что при использовании
@Injectк полю класса, механизм внедрения зависимостей создаст новый экземпляр компонента?
Допустим в каком-то классе я в первый раз использую @Inject.
@Inject
private JWTAuthContextInfo authContextInfo;
Будет ли это равносильно тому, что я вызову new?
private JWTAuthContextInfo authContextInfo = new JWTAuthContextInfo();
- Если я применю
@Injectеще раз (в другом классе), то что я получу? Будет создан еще один экземпляр или механизм DI подставит предыдущий экземпляр компонента?
В другом классе я снова применяю @Inject
@Inject
private JWTAuthContextInfo authContextInfo;
Вызовет ли CDI new?
private JWTAuthContextInfo authContextInfo = new JWTAuthContextInfo();
Или он подставит предыдущий созданный компонент?
Буду благодарен всем за ответы!
Ответы (1 шт):
Здесь все зависит от того как вы пропишете ваши зависимости. Если у к примеру вы в модуле напишете метод
@Provides
@Singleton
static JWTAuthContextInfo provide JWTAuthContextInfo() {
return new JWTAuthContextInfo();
}
То вы создадите ваш объект один раз, после чего Dagger его закеширует и будет отдавать этот же экземпляр всякий раз когда вы его попросите.
@Provides
static JWTAuthContextInfo provide JWTAuthContextInfo() {
return new JWTAuthContextInfo();
}
В этом случае Dagger будет будет всегда создавать новый объект.
Вы так же можете описать свою аннотацию Scope и с помощью нее определять сколько будет жить ваш объект.
И вообще рекомендую к прочтению серию статей по Dagger 2.