当前位置: 首页 > 知识库问答 >
问题:

泽西岛2-请求范围绑定与单例绑定

羊舌琛
2023-03-14

我正在学习jer并尝试构建一个rest api。但是我很难理解各种绑定之间的区别-bind()AbstractBinder()bindFactory()以及范围-Request estScopedSingletonPerLookup。它们之间有什么区别以及何时使用哪一个?

e、 g.假设我有一些特定于请求的数据传入请求头。我想在请求处理期间多次使用此数据(比如在资源类、DAO等中)。我想到的是,我将使用请求过滤器,并使用 ContainerRequestContext提取数据,然后将其存储到某个类中。但我无法确定如何绑定这个类,以便以后可以访问它。在这种情况下使用哪种绑定?

共有1个答案

吕文林
2023-03-14

< code>bind()和< code>bindFactory()是< code>AbstractBinder类中的方法,用于在注册表中绑定服务。< code>AbstractBinder是您向Jersey注册的内容,以便它知道如何配置您的所有绑定。您使用< code>bind()来绑定服务本身。使用< code>bindFactory()绑定服务,使用< code >工厂(或2.26中的< code >供应商)创建服务。

< code>RequestScoped表示服务的作用域是请求,这意味着在请求的生存期内它将是同一个实例。当服务依赖于与请求相关的信息(如请求头)时,可以使用这个范围。

Singleton范围意味着在应用程序的生命周期内只会有一个服务实例。当服务可以随时安全使用而不会绑定到任何请求时,您将使用此范围。

< code>PerLookup意味着每次查找时都会创建一个新的服务实例,可以直接通过< code>ServiceLocator(或2.26中的< code>InjectionManager)或通过< code>@Inject(或其他注入)注释。尽管这是默认范围,但< code>RequestScope和< code>Singleton范围更适合Jersey应用程序上下文中的大多数用例。

对于您想从请求上下文中获取信息并在服务中使用它的用例,您可以使用Request estScoped服务并使用带有Factory(或2.26中的供应商)的bindFactory(),并将请求上下文注入到Factory并使用该上下文创建您的服务。您可以在如何将对象注入到jersey请求上下文中?中看到更多解释。如果您使用的是泽西2.26,您还需要阅读泽西2.26:ResourceConfig bindFactory无法将工厂转换为供应商中注册@Inject

 类似资料:
  • 我很难理解泽西岛的注入机制。JAX-RS规范(http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-520005)指出,在应用程序子类、根资源类和提供程序中可以通过@Context进行注入。 我现在有一个在启动时实例化的类,并且有一个在每次请求时调用的方法。在方法内部,我需要访问当前的UriInfo对象。问题是,这个方法不是从我的

  • 我有一个基于令牌的用户身份验证的Jersey REST应用程序。当请求传入时,会创建一个自定义的对象,并将其作为一个属性添加到 的用法,我想知道是否可以使用injection将这个< code>RestContext注入到我的资源和其他过滤器中(例如,我有一个过滤器,它从< code>RestContext中创建一个< code>SecurityContext),但是我找不到答案。一般来说,我如何

  • 这件事已经做了几个小时了,似乎什么也做不成。它是Jersey 2.23.2。我想将一个基于请求的Hibernate会话注入Jersey提供程序,以便在我的REST API中使用。相反,我得到的是: 这是我的代码: 我已经尝试了上百种排列方式。不知疲倦地在网上搜索。因为我一直没有明确地看着这个问题,所以我认为它一定很简单。 当我在 AbstractBinder 配置方法中指定单例而不是请求范围时,我

  • 注释如何在Jersey中工作,以便对特定的资源方法或资源类应用筛选器? 请考虑以下注释: 它是如何工作的?

  • 我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?

  • 我有一个问题,让昂首阔步的博士一代工作。 以下是我使用的专家: 我在ResourceConfig类中添加了swagger ressources: 然后我声明了一个 servlet 来配置 Swagger: 通过上面的配置,可以使用swagger servlet:如果我浏览到api文档url,我会得到以下信息: 但是,如果我使用如下所示的真实配置更改 swagger servlet 配置中的 api