注释@EJB的作用是什么?

时间:2014-01-04 22:30:59

标签: java-ee dependency-injection ejb

我想了解@EJB的作用是什么以及容器在注射过程中的作用。

我是Java EE的初学者,目前我使用依赖注入来使用EJB,因为我已经学会了这种方法。

例如,我有一个本地接口

@Local
public interface MyInterface

然后,我实现了这个接口

@Stateless
public class MyInterfaceImpl implements MyInterface

当我想使用EJB时​​,我写了

@EJB
MyInterface ejb;

首先,我真的不明白注入依赖期间容器中发生了什么。

此外,为什么更好(或不可能)使用接口来调用EJB而使用EJB(在我看来会更直接)

MyInterfaceImpl ejb;
ejb.myMethod(); 

1 个答案:

答案 0 :(得分:2)

  1. 当容器看到你的@EJB它知道它应该找到EJB接口的正确实现时,实例化这个bean(new MyInterfaceImpl()的反射版本),调用它的生命周期方法,然后让它可供你使用。
    它为您完成所有这些 - 您只关注业务逻辑和依赖关系,而不关注依赖EJB的配置,实例化或生命周期管理。

  2. 可以直接注入EJB实现者类(@LocalBean - 无接口视图)。对于一些足够简单的案例,你可以对它感到满意。但是,对于其他实际示例,您可能希望在部署时交换EJB业务接口的实现。此实现可能因部署而异。 如您所示,在代码中对实现者类进行硬编码会使您与接口的实现紧密耦合 - 即,如果不重新编译代码,您将无法交换它。