У меня есть вопрос относительно Android Dagger 2 и использования аннотаций @Inject и @Provide. Учитывая следующие два упрощенных примера:Android Dagger 2: Inject versus Предоставляет
public class A {
String msg;
public A(String msg){
this.msg = msg;
}
}
public class B {
public A a;
public B(A a){
this.a = a;
}
}
@Module
public class AModule {
@Provides
A providesA(){
return new A("blah");
}
@Provides
B ProvidesB(A a)
{
return new B(a);
}
}
пример довольно прямо вперед, у меня есть два метода в моем AModule с @Provides аннотациями. Поэтому Кинжал может создать объект B, используя экземпляр A со строкой «blah».
Мой второй пример выглядит следующим образом:
public class A {
String msg;
public A(String msg){
this.msg = msg;
}
}
public class B {
public A a;
@Inject
public B(A a){
this.a = a;
}
}
@Module
public class AModule {
@Provides
A providesA(){
return new A("blah");
}
}
В этом примере Dagger может создать экземпляр B, потому что объект А может быть создан с помощью AModule. Экземпляр B может быть создан, потому что его конструктор использует аннотацию @Inject.
Так что мой вопрос: в чем разница между этими двумя примерами. Оба, похоже, имеют одинаковую семантику. Сгенерированный код отличается и есть ли какие-либо подводные камни? Или это просто вопрос или личный вкус или лучшие практики?