代码之家  ›  专栏  ›  技术社区  ›  DrunkOnBytes

Jersey 2-请求范围绑定与单例绑定

  •  3
  • DrunkOnBytes  · 技术社区  · 7 年前

    我在学习 Jersey 并尝试构建rest api。但我很难理解不同绑定之间的区别- bind() ,则, AbstractBinder() ,则, bindFactory() 还有范围- RequestScoped ,则, Singleton PerLookup .它们之间有什么区别,何时使用哪一种?

    e、 g.假设我有一些特定于请求的数据传递到请求头中。我想在请求处理期间多次使用这些数据(比如在资源类、DAO等中)。我想我会用 request filter 并使用 ContainerRequestContext 并将其存储到某个类中。但我不知道如何绑定这个类,以便以后可以访问它。在这种情况下使用哪个绑定?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Paul Samsotha    7 年前

    bind() bindFactory() 中的方法 AbstractBinder 类,用于在注册表中绑定服务。这个 抽象活页夹 是您向Jersey注册的内容,以便它能够配置您的所有绑定。您使用 绑定() 绑定服务本身。您使用 bindFactory() 使用 Factory (或 Supplier 在2.26+中创建服务。

    RequestScoped 意味着服务的作用域是请求,这意味着在 要求 。当服务依赖于与请求相关的信息(如请求标头)时,您将使用此作用域。

    Singleton 作用域意味着在 应用 。当服务可以在任何时候安全使用而不受任何请求限制时,您将使用此范围。

    PerLookup 意味着每次创建一个新的服务实例时 向上看 ,直接通过 ServiceLocator (或 InjectionManager 或通过 @Inject (或其他注入)注释。即使这是默认范围 RequestScope 单身汉 范围将更适合Jersey应用程序上下文中的大多数用例。

    对于希望从请求上下文获取信息并在服务中使用的用例,可以使用 请求范围 服务和使用 bindFactory() 使用 工厂 (或 供应商 并将请求上下文注入 工厂 并使用上下文创建服务。您可以在中看到更多解释 How to inject an object into jersey request context? 。如果您使用的是Jersey 2.26+,您还需要阅读 Jersey 2.26: register @Inject in ResourceConfig bindFactory cannot convert Factory to Supplier