У меня есть классы A
, B
и их реализация AImpl
, BImpl
.
interface A {
}
interface B {
}
interface C {
}
class AImpl{
@Inject
AImpl(B b){}
}
class BImpl{
@Inject
BImpl(String foo, C c){}
}
class CImpl{
}
Чтобы настроить зависимости в Guice, я бы написал smt как
bind(A.class).to(AImpl);
bind(C.class).to(CImpl);
@Provides B provideB(C c){
return new BImpl("foo", c)
}
Весной я могу сделать smt как
@Bean public A a() {
return new AImpl(b())
}
@Bean public B b() {
return new BImpl("foo", c());
}
@Bean public C c() {
return new CImpl();
}
Есть несколько минусов
- Я должен написать, что AImpl требует B в 2 местах (конструктор и конфиг).
- Я должен написать больше кода (CImp и AImpl требуют создания метода вместо одного выражения)
Есть ли способ улучшить мою конфигурацию spring без выполнения xml?
upd Я также не хочу загрязнять свои классы аннотациями, связанными с Spring, такими как @Component. И я бы предпочел инъекцию конструктора любым другим инъекциям. Сканирование также не является предпочтительным решением. Итак, могу ли я сделать Spring в стиле Guice?
upd2
Итак Я хочу архив
- Автопроводка
- Внедрение конструктора
Без
- XML
- Сканирование пути