什么是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