java - 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;
}
解决方案
我想我找到了问题所在。HttpServletRequest 结束后,垃圾收集器尝试完成模型。但此时 hk2-locator MethodInterceptor 拦截并尝试查找或创建对象。同时没有RequestScope,所以抛出“不在请求范围内”异常。
该异常不会导致应用程序错误,但我不想看到错误。
如果有人找到解决方案,请通知我。
推荐阅读
- c++ - 使用 VCPKG 在 Visual Studio 上安装 geos
- amazon-web-services - 将位置历史记录 REST API 转换为 AWS 位置 ping 的“云原生”方式是什么?
- c# - .Net Core OData 以不同方式序列化日期时间
- asp.net - 如何编写一个存储过程/函数来返回一个对象列表,该列表还包含一个列表作为其属性给 C#
- go - 与solidity 函数相比,Go ABI.Pack 参数类型应该是什么样的?
- javascript - AdminBSBMaterialDesign-Bootstrap-select data-live-search 最近在 Google Chrome 上没有响应
- javascript - 更新 Redux 状态问题?
- javascript - 创建一个 html 页面以从 pancakeswap 转换自定义加密货币的值
- python - 如何在 Python 中找到具有非明显文件类型的 url 中的图像的文件类型
- r - 从字符日期字段 R 中提取年份和月份