Jakarta ee 注释@EJB的作用是什么

Jakarta ee 注释@EJB的作用是什么,jakarta-ee,dependency-injection,ejb,Jakarta Ee,Dependency Injection,Ejb,我想了解@EJB的角色是什么,以及容器在注入过程中的作用 我是JavaEE的初学者,目前我使用依赖项注入来使用EJB,因为我已经学会了这种方法 例如,我有一个本地接口 @Local public interface MyInterface @Stateless public class MyInterfaceImpl implements MyInterface 然后,我实现了这个接口 @Local public interface MyInterface @Stateless publi

我想了解
@EJB
的角色是什么,以及容器在注入过程中的作用

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

例如,我有一个本地接口

@Local
public interface MyInterface
@Stateless
public class MyInterfaceImpl implements MyInterface
然后,我实现了这个接口

@Local
public interface MyInterface
@Stateless
public class MyInterfaceImpl implements MyInterface
当我想使用EJB时,我会编写

@EJB
MyInterface ejb;
首先,我真的不明白在注入依赖期间容器中发生了什么

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

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

  • 可以直接注入EJB实现器类(
    @LocalBean
    --无接口视图)。对于一些简单的情况,这就足够了,你会很满意的。然而,对于其他实际示例,您可能希望在部署时交换EJB业务接口的实现。此实现可能因部署而异。 如图所示,在代码中对实现器类进行硬编码会使您与接口的实现紧密耦合——也就是说,如果不重新编译代码,就无法交换接口


  • 谢谢你,彼得。如果我有一个接口和3个实现,容器如何知道对应的EJB?我想通过使用注释的参数。但是在这种情况下,我们也需要重新编译代码来交换实现,不是吗?是的,如果您使用诸如beanName或beanInterface之类的注释参数,您是对的。但是请记住,您可以在部署描述符(
    ejbjar.xml
    )中执行相同的操作。这完全取决于部署。此外,假设您有一个EAR(或WAR),并且在其中的不同JAR中有接口和实现。然后,您可以在部署时决定哪些JAR成为EAR的一部分,以确保只有一个EJB接口实现在EAR/WAR中。