gpt4 book ai didi

java - 实现与多个 EJB 的接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:20 25 4
gpt4 key购买 nike

给定以下界面:

public interface MyRunnable {   
public MyResponse run(int x);
}

它由两个@Stateless bean实现:

@Stateless
public class Bean1 implements MyRunnable {

public MyResponse run(int x) {
// some logic
}
}


@Stateless
public class Bean2 implements MyRunnable {

public MyResponse run(int x) {
// some logic
}
}

现在,我想根据条件运行一个 bean 或另一个。实现这一目标的最佳方法是什么?

这是我尝试过的,没有成功:

@Stateless
@LocalBean
public class MainBean {

@Inject
private Bean1 bean1;

@Inject
private Bean2 bean2;

public void someMethod(int y) {

MyRunnable runnable = null;
if (y == 1)
runnable = bean1;
else
runnable = bean2;

runnable.run(5);

}
}

代码可以编译,但它给我(在 Wildfly 中)一个启动错误:

WELD-001408: Unsatisfied dependencies for type Bean1 with qualifiers @Default

更新我注意到的东西;如果我从 bean 中删除 implements MyRunnable,则不会出现启动错误。

最佳答案

由于您在 Bean1Bean2 中实现相同的接口(interface),它们被映射到 MyRunnable(它们现在是 @本地 bean)。由于 Weld 不知道如何解决这个问题,您需要指定要注入(inject)的 bean。正确的方法是:

@Stateless
public class MyBean {

@EJB(beanName = "Bean1")
MyRunnable bean1;

@EJB(beanName = "Bean2")
MyRunnable bean2;

public void run() {
MyRunnable r = Math.random() < 0.5d ? bean1 : bean2;
r.run(10);
}
}

关于java - 实现与多个 EJB 的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774923/

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