无法在使用接口的 class 中使用 EJB

Can't use EJB in class that use interface

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

public interface Interface {  public void methodTest ();  }

子Interface.java

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

myEJB.java

@Stateless
public class myEJB extends SomeAbstractFacade {
@PersistanceContext
private EntityManager em ; 

....

}

UserController.java

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

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

}

}

当我执行 methodTest 时,我们可以在输出中读到他为空。
谢谢

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

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

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

   @Inject
   private interface myInterface ;

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

   }

}

依赖注入仅在托管 类 上受支持,例如 Session BeansInterceptors,而在常规 POJO 上不受支持。因此你不能在 helper 类 上使用注入。我们可以举个简单的例子 Java Class 被归为一级, EJB 被归为上级,这意味着他们无法轻松沟通,解决方案是使用 lookup 意味着去搜索EJB 有他自己的道路。