我想了解@EJB
的作用是什么以及容器在注射过程中的作用。
我是Java EE的初学者,目前我使用依赖注入来使用EJB,因为我已经学会了这种方法。
例如,我有一个本地接口
@Local
public interface MyInterface
然后,我实现了这个接口
@Stateless
public class MyInterfaceImpl implements MyInterface
当我想使用EJB时,我写了
@EJB
MyInterface ejb;
首先,我真的不明白注入依赖期间容器中发生了什么。
此外,为什么更好(或不可能)使用接口来调用EJB而使用EJB(在我看来会更直接)
MyInterfaceImpl ejb;
ejb.myMethod();
答案 0 :(得分:2)
当容器看到你的@EJB
它知道它应该找到EJB接口的正确实现时,实例化这个bean(new MyInterfaceImpl()
的反射版本),调用它的生命周期方法,然后让它可供你使用。
它为您完成所有这些 - 您只关注业务逻辑和依赖关系,而不关注依赖EJB的配置,实例化或生命周期管理。
可以直接注入EJB实现者类(@LocalBean
- 无接口视图)。对于一些足够简单的案例,你可以对它感到满意。但是,对于其他实际示例,您可能希望在部署时交换EJB业务接口的实现。此实现可能因部署而异。
如您所示,在代码中对实现者类进行硬编码会使您与接口的实现紧密耦合 - 即,如果不重新编译代码,您将无法交换它。