我使用的是 Wildfly 10.1.0 和 JavaEE 7
我有这个界面:
public interface TestEjb {
String something();
}
以及实现它的这个 Ejb 类:
@LocalBean
@Stateless
public class TestEjbImpl implements TestEjb {
@Override
public String something() {
return "Hello world";
}
}
当我使用 @Path 注释的 jax-rs 类将其注入(inject)时
@Inject
private TestEjb testEjb;
它给出一个错误,指出“WELD-001408:带有限定符@Default的类型TestEjb的依赖关系不满足”
但是当我注入(inject)它时
@Inject
private TestEjbImpl testEjb;
效果很好。 令人惊讶的是,这两种方法在 jboss-eap-6.4 中都没有问题。但为什么呢?
最佳答案
首先,您将 CDI 注入(inject)与 EJB 注入(inject)混合在一起。而是使用@EJB
(而不是 @Inject
)在注入(inject) EJB 时。
@LocalBean
具有无界面 View 。因此,您有一个没有 View 注释的接口(interface)和一个没有接口(interface) View 注释的 bean。 EJB 容器将其理解为无界面 View 。
最好的方法是注释 TestEjb
与 @Local
的接口(interface)查看并删除 @LocalBean
来自TestEjbImpl
实现以使您的解决方案发挥作用。
界面
@Local
public interface TestEjb {
String something();
}
EJB
@Stateless
public class TestEjbImpl implements TestEjb {
@Override
public String something() {
return "Hello world";
}
}
注入(inject)时间
@EJB
private TestEjb testEjb;
我希望这会有所帮助。
Further reading ...
关于java - 通过 Wildfly 应用程序中的接口(interface)注入(inject) EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40650111/