CDI 的实例或 Guices 提供程序的 Spring 等效项是什么

2022-09-02 04:32:16

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

@Inject
Instance<MyObject> myObjectInstance;
//...
MyObject myObjectInstance.get();

同样,在Guice中,您可以执行以下操作:

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

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


答案 1

因此,经过大量的挖掘,我发现Spring支持JSR-330。这个JSR定义了一个简单的API - 整个规范实际上只是这个API - 它标准化了几个依赖关系注入接口,注释和行为。

与Spring不同,该接口不会在获取bean引用时引发异常。此外,您仍然需要在某个位置定义此 FactoryBean(读取 XML 或类,这是次优的)。FactoryBeanjavax.inject.Provider@Configuration

由于一个错误,在当前的Spring 3.1.1中,不起作用。它确实在Spring 3.1.0中起作用javax.inject.Provider

为了使用它,你只需要包括 - 如果你使用maven,你可以:javax.injectjar

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>

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

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

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

尽管我之前对康斯坦丁的评论,但Spring确实自己创建了提供者。(我正在针对Spring 3.1.1进行测试,并遇到了这个Spring Provider回归问题)


答案 2

听起来像工厂


推荐