【问题标题】:Should utility classes in Java EE application be EJB's or classes with static methodsJava EE 应用程序中的实用程序类应该是 EJB 还是具有静态方法的类
【发布时间】:2017-11-19 22:42:19
【问题描述】:

我正在制作一个 Java EE 7 应用程序。我需要一些实用程序类,所以我不会编写相同的代码 n 次。

将它们制作成 EJB 并在必要时注入是一种好习惯,还是使用静态方法将它们制作成普通类更好。

这将如何影响性能?我的理解是,使它们成为 EJB 可以提高性能,就像使用具有静态方法的普通类一样,一次只有一个 bean 可以访问一个实用程序方法。另一方面,使它们成为 EJB 将需要应用程序服务器实例化这些实用程序 EJB 的池,这似乎可以提高性能,购买可能会导致更多的内存使用。

另一方面,我的实用程序类会很简单,主要是一个衬里,不会有任何复杂的处理,它们也不会跟踪或依赖于对象的状态。

我的实用程序类的示例如下:

  • 检查字符串是否不包含数字或特殊字符
  • 检查电子邮件地址是否正确
  • 使用默认值(statusCode、message)创建新的 Response 对象(此 Response 对象用于 Web 服务作为返回类型)

【问题讨论】:

    标签: java performance jakarta-ee ejb


    【解决方案1】:

    我的理解是,使它们成为 EJB 可以提高性能,就像使用具有静态方法的普通类一样,一次只有一个 bean 可以访问一个实用程序方法。

    没办法。将Math 视为典型的实用程序类。任意数量的线程可以同时调用Math.sqrt,不会增加额外开销。

    对于此类任务,您无法超越静态方法的性能。使用其他东西的唯一原因是灵活性。想象一下,Math2 中有一个稍微不精确但速度更快的sqrt 计算方法。在不修改代码的情况下,您无法切换到更快的实现。使用 EJB,这将是微不足道的。

    使它们成为 EJB 需要应用程序服务器实例化这些实用程序 EJB 的池

    我怀疑“池”在这里是正确的词,因为实用程序类对应于无状态 bean,然后单个实例就足够了。

    调用 bean 不能比静态方法调用快,它可能会慢一些,但不会慢很多。指导您做出决定的不是性能。

    对于您的所有三个示例,我都会选择静态方法。您不太可能需要不同的实现,甚至在运行时在多个实现之间切换。它可能会发生,但您可以轻松适应。

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 2013-05-20
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 2013-04-22
      • 1970-01-01
      相关资源
      最近更新 更多