Java Can';不要在使用接口的类中使用EJB

Java Can';不要在使用接口的类中使用EJB,java,jakarta-ee,ejb,Java,Jakarta Ee,Ejb,我在一个JavaEE项目中工作,我使用一个接口来实现这个方法,但是当我想使用EJB时,它会说我的EJB是空的 Interface.java public interface Interface { public void methodTest (); } SubInterface.java public class SubInterface implements Interface { @EJB private myEJB myejb @Override public void metho

我在一个
JavaEE
项目中工作,我使用一个接口来实现这个方法,但是当我想使用
EJB
时,它会说我的EJB是空的
Interface.java

public interface Interface {  public void methodTest ();  }
SubInterface.java

public class SubInterface implements Interface {
@EJB
private myEJB myejb
@Override
public void methodTest(){
if( myejb == null ){
System.out.println("He is null");
}
} 
}
@Stateless
public class myEJB extends SomeAbstractFacade {
@PersistanceContext
private EntityManager em ; 

....

}
@ManagedBean
@ViewScoped
public class UserController extends SomeAbstractController implements         Seializable{
private interface myInterface ;

public void method (){
myInterface  = new SubInterface();
myInterface.methodTest();

}

}
myEJB.java

public class SubInterface implements Interface {
@EJB
private myEJB myejb
@Override
public void methodTest(){
if( myejb == null ){
System.out.println("He is null");
}
} 
}
@Stateless
public class myEJB extends SomeAbstractFacade {
@PersistanceContext
private EntityManager em ; 

....

}
@ManagedBean
@ViewScoped
public class UserController extends SomeAbstractController implements         Seializable{
private interface myInterface ;

public void method (){
myInterface  = new SubInterface();
myInterface.methodTest();

}

}
UserController.java

public class SubInterface implements Interface {
@EJB
private myEJB myejb
@Override
public void methodTest(){
if( myejb == null ){
System.out.println("He is null");
}
} 
}
@Stateless
public class myEJB extends SomeAbstractFacade {
@PersistanceContext
private EntityManager em ; 

....

}
@ManagedBean
@ViewScoped
public class UserController extends SomeAbstractController implements         Seializable{
private interface myInterface ;

public void method (){
myInterface  = new SubInterface();
myInterface.methodTest();

}

}
当我执行methodTest时,我们可以在输出中读取he为null。

谢谢

您需要注入接口实例。当您使用“new”时,所有注释(@EJB等)都将被忽略,因为依赖关系管理器不知道该实例的创建

因此,在托管bean中注释私有接口字段,ejb将为您注入

@ManagedBean
@ViewScoped
public class UserController extends SomeAbstractController implements         Seializable{

   @Inject
   private interface myInterface ;

   public void method (){
      myInterface.methodTest();

   }

}

依赖项注入仅在托管类上受支持,如
会话bean
拦截器
,而在常规
POJO
上不受支持。因此,不能在助手类上使用注入。我们可以举一个简单的例子,
Java类
被分类在一个级别上,
EJB
被分类在一个更高的级别上,这意味着它们无法轻松通信,解决方案是使用查找,这意味着用自己的路径搜索
EJB

如何实例化具有myejb字段的类?它需要由EE提供者的依赖注入框架实例化,否则EJB将不会被注入。另外,请尝试以大写字母(CamelCase)开头类名。java社区的其他人会很感激的。我会更新我的问题以添加myEJB类。你能展示一下如何实例化SubInterface类吗?我更新了我的问题,不是我的意思。能否显示在哪里有子接口类型的实例(变量)?还演示了如何创建该实例。不起作用,我不明白为什么子接口中会出现问题。如果可以在java类中使用EJB,那就很奇怪了。问题是您使用的是“new”。当您使用'new'关键字时,将不会创建EJB。当您第一次需要调用它时,您将使用new,这就是为什么我使用new SubInterfaceNo,进行依赖项注入的框架应该为您创建一个'new SubInterface'实例并注入它。当您自己调用“new”时,您绕过了依赖项注入,所有EJB都将为空。即使您有3或4个不同的子接口?!?“我们可以举一个简单的例子,Java类被划分为一个级别,EJB被划分为一个更高的级别,这意味着它们无法轻松通信,解决方案是使用查找,这意味着用自己的路径搜索EJB。”这对我来说完全不清楚,我不明白你为什么接受这个答案(投反对票)而不是三次投赞成票。因为你投赞成票的解决方案与你认为的解决方案相差甚远,每个问题对员工来说都是一个新问题——如何提出要求,如果三个人投赞成票并不意味着这是问题的正确答案,你知道,即使我的回答是正确的,我也不会得到任何奖励(声誉),这意味着我认为很了不起,不是吗,不止一个人认为这个问题和投票结果是匹配的(是的,包括我)。如果不是像你所说的那样遥遥无期,那么只有一件事是错的。你发布的问题不是你的实际问题,你以完全不同的方式解决了真正的问题。这本身也很了不起,因为你的大部分答案与投票结果大致相同(只是相反)。因为你没有发布你如何解决它的代码,这个Q/A组合(你的A)对其他人来说是完全无用的。哇,你可以使用谷歌我找到了什么是查找,以及如何在两次点击后使用它,这是很难找到的,如果你认为最高投票权意味着最好的解决方案,那你就错了,需要考虑一下itI。如果我知道该找什么,我可以在谷歌找到任何东西。因为这是这里的难点(我有一些想法,但是如果你这样做/选择了那个解决方案,那么我认为你的代码中要么存在设计缺陷,要么确实存在与你在这里发布的问题不同的问题)。但是,由于您不会在代码中共享解决方案,我只能猜测,猜测是危险的。。。不过,这种问答(你的A)组合是没有帮助的。