java - EJB3 - 通过注入(inject)与查找获取 bean - 有什么区别、含义和问题?

原文 标签 java ejb-3.0

我知道有两种方法可以获取 EJB 实例:

  • 通过@EJB 注释在 servlet 和 EJB 中进行依赖注入(inject)
  • 通过 Context.lookup 在任何地方进行 JNDI 查找

  • 使用这两种方法有什么区别、影响和陷阱?他们是一样的吗?依赖注入(inject)比查找更快吗?事务处理和对象生命周期管理呢?

    我所知道的事情包括:

    注解
  • 仅适用于 servlet 和 EJB
  • 方便的语法
  • 容器独立

  • 抬头
  • 可以在运行时以编程方式实例化 EJB 接口(interface)的不同实现。
  • 可以在任何地方工作 - 例如POJO。
  • 取决于容器的命名约定
  • 最佳答案

    两者都达到相同的结果。更重要的是联轴器 .使用注解,您可以实现松散耦合,并且更容易模拟和测试。通过直接查找,您依赖于有时可能不方便的初始上下文。

    恕我直言 查找在任何地方都不起作用 .例如,在 Glassfish 中,从 POJO 在本地 EJB 上的查找只有在之前使用 @EJBs(...)“导入”时才有效。在使用 POJO 的 session bean 之一上。见 this discussion .您需要了解 之间的区别本地 全局为此,JNDI。

    我的建议是:尽可能多地使用注释。如果 POJO 需要对 EJB 的引用,请将其作为参数传递(例如在构造函数中)。这称为依赖倒置,无论如何都是一种很好的做法。

    关于java - EJB3 - 通过注入(inject)与查找获取 bean - 有什么区别、含义和问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2085679/

    相关文章:

    web-services - Glassfish、EJB3、SOAP Web 服务和基本身份验证

    java - WebView 无法从 wordpress 网站下载媒体(POST)

    java - Java中的TCP网络摄像头流

    java - 需要 2 次单击 Enter 才能获得对 recyclerview 的响应

    jboss - 重新部署后注入(inject)的@EJB 引用为空

    java - EJB3 事务回滚

    java - Java EE 应用程序中的缓存

    java - 使用Dijkstra的多个最短路径

    java - Seam Hibernate 为两个单独的线程提供相同的 EntityManger 实例

    java - 从同一 EAR 中的 WAR 调用 EJB