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

问题描述 投票:0回答:2

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

@注入
实例 myObjectInstance;
//...
MyObject myObjectInstance.get();

类似地,在 Guice 中你可以这样做:

@注入
提供者 myObjectInstance;
//...
MyObject myObjectInstance.get();

我想知道 Spring 中是否有类似的构造,或者您必须使用

ApplicationContext
才能获取参考?

java spring guice cdi
2个回答
16
投票

经过大量研究,我发现 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

 
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 回归问题


2
投票
FactoryBean

© www.soinside.com 2019 - 2024. All rights reserved.