有没有办法知道状态是否处于活动状态而不捕获ContextNotActiveException?

Ant*_* O. 5 cdi java-ee-6 jboss-weld

我想知道RequestScoped上下文当前是否在方法中处于活动状态.

目前,我在做什么:

@Inject private BeanManager beanManager;

public boolean isRequestScopeActive() {
    try {
        if (beanManager.getContext(RequestScoped.class).isActive()) {
            return true;
        } else {
            return false;
        }
    } catch (final ContextNotActiveException e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为,ContextNotActiveException只要了解范围是否有效,我就会有点沉重.

您有没有更好的方法来了解CDI中的上下文的状态(活动与否)?

Lin*_*oln 5

不,我们在 CDI 1.0 中唯一的选择是捕获 ContextNotActiveException。

您的解决方案应该有效。

这实际上最终成为一个问题,因为范围实现不可用于注入。

例如,您不能只@Inject RequestScopedContextImpl rq;检查rq.isActive()方法,因为在不知道 CDI 本身的实现细节的情况下我们无法访问该类。