动态 CDI 注入 @Named

Dynamic CDI Injection @Named

我想根据配置或环境变量注入一个@Named bean(或通过不同的方式实现相同的目标)。例如我想替换

@Inject
@Named("myredBean")

@Inject
@Named("{bean.color}")

或类似...

我没有使用 Spring,所以我更喜欢非 Spring 的解决方案!我正在使用 Quarkus

以稍微不同的方式实现相同目标的一种简单方法是在生成 CDI bean 时读取环境变量,而不是在按照我的问题注入时读取环境变量

@ConfigProperty(name = "bean.colour")
private String colour;



@Produces
public ColourBean create() {
        LOGGER.info("Producing a ColourBean for: {}",colour);



    switch(Colour.valueOf(colour)){

        case RED:
        case red:{
            return new RedBean();
       }
         ...

    }

}