2

この記事を読んだ後、Google Guice を試してみました: http://tech.puredanger.com/2007/07/03/pattern-hate-singleton/

しかし、私が理解できなかったことがあります。Guice の @Singleton アノテーションを使用すると、インジェクションは同じインスタンスを注入しますが、1 つのインジェクターに対してのみです。

別の場所に別のインジェクターを作成すると、@Singletion は機能しません (ドキュメントに記載されているとおり)。

そのため、インジェクター インスタンスをコードのあらゆる場所に渡すか、シングルトンで使用できるようにする必要があります。

そして、これはまさに私が避けたいことです。

毎回同じインスタンスを返すことを可能にするためにインジェクターを管理するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

3

Guice を使用するコードは、通常、インジェクター自体にアクセスする必要はありません。複数のオブジェクトを作成する必要がある場合、オブジェクトは依存関係または依存関係の を受け取りますProvider<T>

通常、オブジェクトに依存関係があり、それ自体がインジェクターによって作成されていない場合にのみ、オブジェクトにインジェクターが必要です (そのため、依存関係を注入することはできません)。どこでも Guice を使用している場合は、おそらくアプリケーションの起動時にのみ行う必要があります。プロジェクトの一部にのみ Guice を使用している場合、インジェクターは、現在それを介してアクセスしている他のすべてのシングルトンをプロキシする単一のシングルトンになります。

注入されていないシングルトンに関連する荷物の一部はありませんが、注釈@Singletonが付けられたクラスはまだシングルトン オブジェクトであることに注意してください。それらに依存しすぎないようにする必要があります。

于 2012-07-23T10:54:17.507 に答える