我想将常用的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();
}
表现怎么样?有什么明显的差异吗?这两种解决方案对我来说都是可能的,一种解决方案更好而不是另一种解决方案吗?
一个缺点: 帮助程序已初始化为每个请求。
答案 0 :(得分:1)
将您的Helper
课程标记为@ApplicationScoped
。有了这个,每个应用程序上下文将有一个实例。
尽管如此,如果它只是一个实用程序类,它根本不应该是一个托管bean。我会将其标记为final
,定义private
构造函数并将所有方法标记为static
。这是因为它是一个实用类,它不需要维护任何状态。