很多周围挖我发现,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罐子 - 如果你使用Maven的,您可以:
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
Spring将检测到它,并从此刻起,你可以简单:
@Inject
Provider<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();
像在吉斯例子中,由于它是相同的API。
尽管我之前对Konstantin发表过评论,但Spring 确实创建了 Provider。 (我是测试它针对春季3.1.1和运行这个Spring Provider regression issue)
+1好答案。 –
我担心提供程序<>和实例<>之间存在显着差异(希望我错了)。首先:实例实现Iterable,这对你如何使用它有很大的影响。例如。对我来说,经常使用的是声明@Inject Instance xxx ...所以我可以遍历每个实现无需知道类名的接口的类的实例。我想知道如何使用Provider来完成此操作。 –
Rafael
'Instance <>'不是JSR-330的一部分,也不是Spring的一部分。当时我遇到的问题是获取原型bean(取决于某些上下文变量),而没有掌握applicationContext本身。 –