【问题标题】:Quarkus / CDI and "java config" DI definitionsQuarkus / CDI 和“java config”DI 定义
【发布时间】:2020-02-20 22:53:31
【问题描述】:

我刚刚开始了 quarkus 概念验证。容器启动时间太棒了!

现在,我正在研究依赖注入部分。并找出选项。

https://quarkus.io/blog/quarkus-dependency-injection/

我的偏好是:

我更喜欢构造函数注入。 (一切正常)。

我更喜欢“java config”,因此我可以遵循“Composition Root”模式,将所有应用程序依赖注入放在一个公共位置。 (见https://blog.ploeh.dk/2011/07/28/CompositionRoot/

使用 Spring DI,这是通过

org.springframework.context.annotation.Configuration

并在那里声明 Bean。

另外,我不想在我的类中放置“@ApplicationScoped”注释。

CDI/Quarkus 是否支持“java config”模型?我询问 quarkus 的原因是我读到 quarkus 的 CDI 实现有限。

//开始报价//我们的主要目标是实现超音速 与 CDI 兼容的面向构建时的 DI 解决方案。这将允许 用户继续在他们的应用程序中使用 CDI,但也利用 Quarkus 构建时优化。但是,ArC 不是完整的 CDI 由 TCK 验证的实现 - 另请参阅支持的列表 功能和限制列表。//结束引用

所以我的问题不仅仅是 CDI 问题。

我尝试了不同的互联网搜索词,但它们一直向我显示 Spring 链接。 :(

【问题讨论】:

    标签: cdi quarkus


    【解决方案1】:

    您应该创建一个 CDI bean 来生成您的 bean,这是 Spring 称为 Java 配置的标准 CDI 方法。

    像这样的

    import javax.enterprise.context.ApplicationScoped;
    import javax.enterprise.inject.Produces;
    
    
    @ApplicationScoped
    public class MyConfiguration {
        @Produces
        public MyBean myBean(){
            return new MyBean();
        }
    }
    

    【讨论】:

    • 它工作正常。谢谢。有时魔术术语会让人困惑。
    • 我必须添加的唯一注释。是 @Inject 在具有多个构造函数的类上。 (导入 javax.inject.Inject;)
    • 我编辑了您的答案以包含导入语句。 #petPeeve 与 java 示例。
    • 这似乎导致 MyBean 在每次需要时都会产生,这至少不是我想要的......
    • @Tarnschaf @Produces 的默认范围是依赖的,因此每次都会创建一个 bean。如果您希望您的 bean 具有不同的范围,您应该使用范围注释之一来注释生成方法,例如 @ApplicationScoped
    猜你喜欢
    • 2020-02-24
    • 2022-10-30
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2014-03-21
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多