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不同,FactoryBeanjavax.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回归问题