因此,经过大量挖掘后,我发现 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();
就像在 Guice 示例中一样,因为它是相同的 API。
尽管我之前对 Konstantin 发表过评论,但 Spring确实自己创建了 Provider。(我正在针对 Spring 3.1.1 对其进行测试并遇到这个Spring Provider 回归问题)