そのため、いろいろ調べた結果、Spring が JSR-330 をサポートしていることがわかりました。この JSR は単純な API を定義します (仕様全体は文字通りこの API だけです)。これにより、いくつかの依存性注入インターフェイス、注釈、および動作が標準化されます。
Spring とは異なりFactoryBean
、javax.inject.Provider
インターフェイスは Bean 参照の取得時に例外をスローしません。さらに、この FactoryBean をどこかで定義する必要があります (XML または@Configuration
クラスを読み取ります。これは最適ではありません)。
バグのため、現在の Spring 3.1.1 ではjavax.inject.Provider
動作しません。Spring 3.1.0では機能します。
それを使用するには、単純に含める必要がありjavax.inject
jar
ます-mavenを使用する場合、次のことができます:
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
Spring がそれを検出し、その瞬間から簡単に次のことができます。
@Inject
Provider<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();
同じ API であるため、Guice の例と同様です。
Konstantin への以前のコメントにもかかわらず、Springはそれ自体で Provider を作成します。(私はSpring 3.1.1に対してテストしていて、このSpring Providerの回帰問題に遭遇しました)