gpt4 book ai didi

java - 使用 Jersey 实例化组件有什么好处

转载 作者:行者123 更新时间:2023-12-01 10:21:43 25 4
gpt4 key购买 nike

我见过的 Spring Boot 和 Jersey 的所有代码示例都是通过传递组件的类来向 Jersey 注册其组件的。

来自here :

  public static class JerseyServletConfig extends ResourceConfig {
public JerseyServletConfig() {
register(RequestContextFilter.class);
packages("com.github.cthiebault");
register(LoggingFilter.class);
}
}

或者here :

register(ApiListingResource.class);

ResourceConfig's javadoc says :

Register an instance of a custom JAX-RS component (such as an extension provider or a feature meta-provider) to be instantiated and used in the scope of this configurable context.

我的问题是:

  1. 让 Jersey 实例化这些资源有什么好处?

  2. 如果我们应该让 Jersey 管理这些组件,为什么它仍然提供 register(Object component)方法,为什么不将其限制为 register(Class<?> componentClass)

  3. 我们什么时候应该发送我们自己的实例而不是让 Jersey 实例化我们的类?

最佳答案

首先,依赖注入(inject)总的来说是一件好事 - 它允许分离关注点并且可以极大地简化测试。一般来说,将对象创建与对象使用分开可以将业务/应用程序逻辑(即对象使用)与实现问题(决定将哪些对象连接在一起)分开。

允许 Jersey 管理您的资源/组件也是一件好事。这是 Jersey 的一部分。如果您允许 Jersey 管理您的资源生命周期,那么您需要编写/维护的代码就会减少,并且您最终编写/维护的代码将更多地涉及您的应用程序的功能。更少关于你的物体如何组合在一起。

Jersey 提供了一个标准的生命周期,它为您提供了一个约定,允许开发人员在一个心理框架中工作 - 使新开发人员更容易加入,并使现有开发人员更容易在应用程序之间切换。如果需要,可以配置生命周期,这允许您的特殊雪花应用程序在必要时具有特殊的雪花行为。

register(Object) 方法是一个示例,说明如何选择退出 Jersey 对组件生命周期的控制。您可能出于多种原因想要这样做,但通常应该避免这样做 - 让库完成它的工作。异常(exception)情况的例子是,如果您正在与一些遗留代码集成,由于其本身的晦涩/神秘原因,这意味着某些关键类必须是应用程序级单例。甚至可能有一些非遗留原因导致您只需要应用程序中某些内容的单个实例 - 对象映射器始终是一个很好的例子。通常,您现在会使用 JSR-330 支持,但在某些情况下可能无法做到这一点。

通过与 JSR-330 集成,您还可以为某些对象提供自定义命名范围 - 这允许您控制 Jersey 如何创建和使用对象,同时还可以显示您的意图(通过范围名称)。这通常提供了一个干净的结构,它是意图揭示而不是意图隐藏。

关于java - 使用 Jersey 实例化组件有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com