gpt4 book ai didi

java - CDI 的实例或 Guice 提供者的 Spring 等效项是什么

转载 作者:IT老高 更新时间:2023-10-28 13:51:01 26 4
gpt4 key购买 nike

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

@InjectInstance<MyObject> myObjectInstance;//...MyObject myObjectInstance.get();

在 Guice 中您也可以这样做:

@InjectProvider<MyObject> myObjectInstance;//...MyObject myObjectInstance.get();

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

最佳答案

所以经过大量挖掘后,我发现 Spring 支持 JSR-330。这个 JSR 定义了一个简单的 API——整个规范实际上就是这个 API——标准化了几个依赖注入(inject)接口(interface)、注释和行为。

与 Spring 的 FactoryBean 不同,javax.inject.Provider 接口(interface)在获取 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 regression issue)

关于java - CDI 的实例或 Guice 提供者的 Spring 等效项是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10538528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com