クラス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 には 2 つの場所 (コンストラクターと構成) で B が必要であると書く必要があります。
- もっとコードを書く必要があります (CImp と AImpl は、1 つの式ではなくメソッドの作成が必要です)
xml を実行せずに私の春の構成を改良する方法はありますか?
upd @Component のようなスプリング関連のアノテーションでクラスを汚染したくありません。そして、他のあらゆる種類の注入よりもコンストラクター注入を好みます。スキャンも好ましい解決策ではありません。では、Guice の方法で Spring を実行できますか?
upd2
だからアーカイブが欲しい
- 自動配線
- コンストラクター注入
それなし
- XML
- パススキャン