什么是CDI的实例或Guices Provider的Spring等价物

在CDI中,您可以使用以下命令定义一个对象,该对象将为您提供特定类型的项目:

 @注入
 Instance  myObjectInstance;
 // ...
 MyObject myObjectInstance.get();

同样在Guice中你可以这样做:

 @注入
 Provider  myObjectInstance;
 // ...
 MyObject myObjectInstance.get();

我想知道Spring中是否有类似的构造,或者您必须使用ApplicationContext才能获得引用?

经过大量的挖掘,我发现Spring支持JSR-330。 这个JSR定义了一个简单的API – 整个规范实际上就是这个API – 它标准化了几个dependency injection接口,注释和行为。

与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,你可以:

   javax.inject javax.inject 1  

Spring会检测到它,从那一刻起你可以简单地:

 @Inject Provider myObjectInstance; //... MyObject myObjectInstance.get(); 

就像在Guice示例中一样,因为它是相同的API。

尽管我之前对Konstantin发表了评论,但Spring 确实创建了Provider。 (我是针对Spring 3.1.1测试它并遇到这个Spring Provider回归问题 )

听起来像FactoryBean