CDI实例或指导提供者的Spring等效项是什么
问题内容:
在CDI中,您可以使用以下方法定义一个对象,该对象将为您提供某种类型的物品:
@注入
Instance <MyObject> myObjectInstance;
// ...
MyObject myObjectInstance.get();
同样,在Guice中,您可以执行以下操作:
@注入
Provider <MyObject> myObjectInstance;
// ...
MyObject myObjectInstance.get();
我想知道Spring中是否有类似的构造,或者您必须使用ApplicationContext
来获取参考?
问题答案:
因此,经过大量挖掘,我发现Spring支持JSR-330。这个JSR定义了一个简单的API(整个规范实际上就是这个API),它标准化了几个依赖项注入接口,注释和行为。
与Spring不同,FactoryBean
该javax.inject.Provider
接口在获取bean引用时不会引发Exception。此外,您仍然需要在某个位置定义此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回归问题
)