gpt4 book ai didi

java - Jersey:纯依赖注入(inject)和全局(单例)对象

转载 作者:行者123 更新时间:2023-12-02 02:51:27 29 4
gpt4 key购买 nike

我刚刚使用 Jersey 启动了我的第一个 Java REST 项目。

在这个项目中,我将实现纯依赖注入(inject)架构模式(又名穷人依赖注入(inject))。

如果我理解正确的话,将为每个传入的 HTTP 请求创建此类的一个新实例:

@Path("/v1")
public class ApiControllerV1 {

@POST
@Path("/measurements")
public String newMeasurement() {
// some code here
}
}

我可以将 Composition Root 的生命周期“绑定(bind)”到 ApiControllerV1 的生命周期,但是这样我就失去了在不同请求之间共享对象的能力。

因此,我需要找到一些可以将组合根“绑定(bind)”到的“全局”对象。这个“全局”对象应该可以从 ApiControllerV1 访问。我确信这样的物体存在,但直到现在我还没有找到它。请为我指出正确的方向(代码片段将不胜感激)。

最佳答案

您可以注册 Controller 的实例。这样你就可以通过构造函数传递你想要的任何东西。如果您按类注册或允许 Jersey 为您的 Controller 打包扫描,则按请求实例化只是默认设置。但这不是强制性的

public class AppConfig extends ResourceConfig {
public AppConfig() {
final Whatever whatever = new Whatever();
register(new Controller1(whatever));
register(new Controller2(whatever));
}
}

如果您使用 web.xml 进行配置,则可以通过以下方式配置要使用的 AppConfig

<servlet>
<servlet-name>Jersey</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.example.AppConfig</param-value>
</init-param>
</servlet>

以前,您可能有过类似的情况

<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.your.packages</param-value>
</init-param>

它允许 Jersey 扫描您的资源并为您注册。您可以摆脱这个,因为现在我们自己在 AppConfig 中注册所有内容。

您需要使用 Jersey 配置的任何其他操作,都可以在 AppConfig 内完成。请参阅API for ResourceConfig

顺便说一句,您应该考虑使用 Jersey 已经提供的 DI 系统。它非常容易使用。

关于java - Jersey:纯依赖注入(inject)和全局(单例)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786049/

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