J'ai les classes A
, B
et leur implémentation AImpl
, BImpl
.Configuration Java dans Spring framework
interface A {
}
interface B {
}
interface C {
}
class AImpl{
@Inject
AImpl(B b){}
}
class BImpl{
@Inject
BImpl(String foo, C c){}
}
class CImpl{
}
Pour configurer les dépendances dans Guice Je voudrais écrire smt comme
bind(A.class).to(AImpl);
bind(C.class).to(CImpl);
@Provides B provideB(C c){
return new BImpl("foo", c)
}
Au printemps, je peux faire smt comme
@Bean public A a() {
return new AImpl(b())
}
@Bean public B b() {
return new BImpl("foo", c());
}
@Bean public C c() {
return new CImpl();
}
Il y a plusieurs inconvénients
- je devrais écrire que AImpl a besoin de B à 2 endroits (contre tructor et config).
- Je devrais écrire plus de code (PSEC et AImpl exige la création de la méthode au lieu d'une expression)
Existe-t-il un moyen de impruve ma configuration de printemps sans faire? Xml
upd Je ne veux pas poluer mes classes avec des annotations liées au printemps comme @Component. Et je préférerais l'injection de constructeur à n'importe quel type d'autres injections. La numérisation n'est pas une solution préférable aussi. Alors, je peux faire le printemps à Guice?
UPD2
Alors Je veux archives
- Autowiring
- Constructor injection
Sans
- XML
- PathScan
puis-je faire Autowiring sans scaning et xml au printemps? –
Je n'ai pas rencontré une telle solution. L'autowiring est fait par le conteneur Spring en fonction des paquets que vous définissez dans ComponentScan et c'est fait une fois au moment de l'initialisation. Vous ne savez pas quel problème vous essayez de résoudre en évitant cela. –
Il me semble fastidieux de faire des tests quand componentScan se présente. A part ça, ça me semble être une mauvaise pratique. –