性能:实用程序类与CDI bean

时间:2015-03-02 16:04:17

标签: java performance cdi weld

我想将常用的applicationlogic外化到"实用程序类"称为助手。 applicationlogic需要其他CDI bean才能工作。

两种可能性:

a)

@SessionScoped
class ControllerWithCdiBean {

  @Inject
  Helper helper;

  public void doIt() {
      Object result = helpder.calculate();
  }
}

@RequestScoped
class Helper{

  @Inject
  Service anyService;

  public Object calculate() {
     return anyService.calc();
  }
}

b)中

@SessionScoped
class ControllerWithStaticCallsViaDeltaspike {

  public void doIt() {
      Object result = Helpder.calculate();
  }
}

class Helper{

  private static Service anyService = BeanProvider.getContextualReference(Service.class);

  public static Object calculate() {
     return anyService.calc();
  }

表现怎么样?有什么明显的差异吗?这两种解决方案对我来说都是可能的,一种解决方案更好而不是另一种解决方案吗?

一个缺点: 帮助程序已初始化为每个请求。

1 个答案:

答案 0 :(得分:1)

将您的Helper课程标记为@ApplicationScoped。有了这个,每个应用程序上下文将有一个实例。

尽管如此,如果它只是一个实用程序类,它根本不应该是一个托管bean。我会将其标记为final,定义private构造函数并将所有方法标记为static。这是因为它是一个实用类,它不需要维护任何状态。