首页 > 解决方案 > finalize 方法获取不在请求范围内的非法状态异常

问题描述

我在单例 Binder 服务中有一个模型,它作为请求范围对象注入。服务可以毫无例外地使用该模型。

但是当垃圾收集器尝试完成该模型时,它会得到非法状态异常:不在请求范围内。

有什么想法吗?

public class App extends ResourceConfig {
    public App() {
        register(new Binder());
    }
}

public class Binder extends AbstractBinder{
    
     @Override
     protected void configure() {
         bindFactory(ModelFactory.class)
        .proxy(true)
        .proxyForSameScope(false)
        .to(Model.class)
        .in(RequestScoped.class);
     }
}

@Provider
public class ModelFactory implements Factory<Model> {

    @Context
    HttpServletRequest request;
    
    @Override
    public Model provide() {
        Model model = new Model();
        model.setHeaderParam(request.getHeader("key"));
        return model;
    }
}

public Service {

     @Context
     Model model;
}

标签: javajerseyjax-rshk2

解决方案


我想我找到了问题所在。HttpServletRequest 结束后,垃圾收集器尝试完成模型。但此时 hk2-locator MethodInterceptor 拦截并尝试查找或创建对象。同时没有RequestScope,所以抛出“不在请求范围内”异常。

该异常不会导致应用程序错误,但我不想看到错误。

如果有人找到解决方案,请通知我。


推荐阅读