CDI中拦截器的范围是什么?
又名,这是合法的吗?我会在每个被调用的地方获得相同的拦截器实例吗?
@RequestScoped
public class SalesForceControllerInterceptor {
@Inject
private Logger log;
@AroundInvoke
public Object intercept(InvocationContext context) throws Exception {
...
}
答案 0 :(得分:12)
CDI 1.1 spec表示拦截器应该是Dependent,否则会导致非可移植行为。例如,Weld 2.2.6不允许具有除Dependent之外的范围的拦截器,并将它们视为定义错误。
答案 1 :(得分:4)
是的,拦截器的生命周期与任何其他cdi托管bean一样......因此它们默认依赖,但您可以使用任何需要的范围对它们进行注释。 在您的示例中,同一Request中的所有调用都共享拦截器。如果您需要的是每个呼叫的相同拦截器",您应该考虑更广泛的范围,如会话或应用。
更新:检查注释:cdi 1.1拦截器必须属于依赖范围,而Weld 2.2.6将其他范围视为错误。