1

クラスABその実装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
  • パススキャン
4

2 に答える 2

2

Java コードを使用して Bean を作成する代わりに、Autowiring を使用できます。Java 構成で ComponentScan を定義できます。XML ファイルを使用する必要はありません。

于 2013-03-20T10:02:52.033 に答える
0

これにより、xml なしで OK の Bean が作成され、Spring アノテーションを使用して Bean が汚染されます。

interface A {
}

interface B {
}

interface C {
}

class AImpl implements A {
    AImpl(B b) {
    }
}

class BImpl implements B {
    BImpl(String foo, C c) {
    }
}

class CImpl implements C {
}

@Configuration
class Config {
    @Bean public A a() {
        return new AImpl(b());
    }

    @Bean public B b() {
        return new BImpl("foo", c());
    }

    @Bean public C c() {
        return new CImpl();
    }
}

public class T1 {

    public static void main(String[] args) throws Exception {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
    }
}
于 2013-03-20T10:20:18.343 に答える