gpt4 book ai didi

java - 等同于 CDI 中的@Conditional

转载 作者:行者123 更新时间:2023-11-29 04:32:16 25 4
gpt4 key购买 nike

我有两个具有后构造初始化的类,我需要根据 vm 参数注入(inject)其中一个。我在 Spring 使用@Conditional 注释完成了这种条件注入(inject),但是我在 CDI 中找不到任何等效项。有人可以帮我解决这个问题吗?

代码是这样的,

public void impl1{
@PostConstruct
public void init(){
....
}
....
}


public void impl2{
@PostConstruct
public void init(){
...
}
....
}

如果 vmargument type=1,则必须注入(inject) impl1,如果 type=2,则必须注入(inject) impl2

最佳答案

对于运行时决定(改变你的 beans.xml),你基本上有两个选择:

选项 1:使用生产者方法

@Produces
public MyInterface getImplementation() {
if(runtimeTestPointsTo1) return new Impl1();
else return new Impl2();
}

缺点:您通过使用 new 离开了创建 bean 的世界,因此您的 Impl1 和 Impl2 不能 @Inject 依赖项。 (或者您在生产者 bean 中注入(inject)两种变体并返回其中一种 - 但这意味着两种类型都将被初始化。)

选项 2:使用 CDI 扩展

基本上听取 processAnotated() 并否决你不想要的一切。优秀的博客条目在这里:http://nightspawn.com/rants/cdi-alternatives-at-runtime/

关于java - 等同于 CDI 中的@Conditional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43361113/

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