泽西岛和 HK2 服务定位器

2023-12-03

我正在尝试在 Application 构造函数(从 ResourceConfig 继承的东西)中初始化 Jersey 应用程序中的一些组件。看起来像这样

public Application(@Context ServletContext context,
                   @Context ServiceLocator locator)...

当我尝试在任何时候使用定位器时,我仍然无法使用 locator.create(MyThing.class) 方法创建在 AbstractBinder 中注册的事物的实例。

我确信它们已正确绑定,因为它们通过 @inject 字段注释正确注入到我的资源类中。

不同之处在于 Jersey/HK2 框架正在实例化我的资源类(如预期,因为它们位于我的包扫描路径中),但我似乎无法通过代码利用 ServiceLocator。

我的最终目标是当其他非球衣类具有 @Inject 属性时注入它们,例如。我有一个工作类需要注入配置的数据库访问层。我想说

locator.Create(AWorker.class) 

并注射。

如何获得真正的 ServiceLocator 来注入我已经注册/绑定到 Binder 的所有内容? (或者我应该使用 ServiceLocator 以外的其他东西?)


我假设您正在启动一个 servlet 并有一个扩展类org.glassfish.jersey.server.ResourceConfig并且您的绑定已正确注册(例如使用 Binder 和 registerInstances)。如果您随后想要访问 ServiceLocator 以执行其他初始化,您有两种选择:

一种方法是注册一个 ContainerLifecycleListener (如此处所示在这篇文章中):

// In Application extends ResourceConfig constructor
register(new ContainerLifecycleListener() {

        @Override
        public void onStartup(final Container container) {
            // access the ServiceLocator here
            final ServiceLocator serviceLocator = container.getApplicationHandler().getInjectionManager().getInstance(ServiceLocator.class);

            // Perform whatever with serviceLocator
        }

        @Override
        public void onReload(final Container container) {
            /* ... */}

        @Override
        public void onShutdown(final Container container) {
            /* ... */}
    });

第二种方法是使用Feature,也可以使用自动发现@Provider:

@Provider
public final class StartupListener implements Feature {

    private final ServiceLocator sl;

    @Inject
    public ProvisionStartupListener(final ServiceLocator sl) {
        this.sl = sl;
    }

    @Override
    public boolean configure(final FeatureContext context) {
        // Perform whatever action with serviceLocator
        return true;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

泽西岛和 HK2 服务定位器 的相关文章

随机推荐

  • 如何将网页不可用页面替换为自定义页面? (网页浏览)

    我想更改页面Webpage not Available or ERR NAME NOT RESOLVED to 我的页面 没有互联网连接 如果再次在线或连接互联网 则可以使用刷新按钮返回在线状态 如果未连接 则留在页面中没有网络连接 看起来
  • 如何循环遍历特定表单的所有打开实例?

    我需要更新动态创建的 Form2 的列表框 假设我必须更新此 ListBox 当然在 Form1 中 我没有此 Form2 的引用 因此我无法调用 UpdateList 方法 不 我不能将其设为静态 我什至不知道有没有打开Form2 可能有
  • 将元素插入数组C

    我有一个之前已经排序过的数字数组 所以不需要对其进行排序 我需要插入一个给定的值 将其命名val 位于我的数组中的有效位置 我的程序适用于小于上一个值的给定值 但对于该值大于上一个值的情况 我的程序只是不想插入该值 例如 对于数组 1 2
  • Oracle 动态 sql 与触发器使用:新和:旧变量

    我正在尝试使用 all tab columns 将大型触发器代码简化为简洁的代码 因为表包含 200 列 由于某种原因 当尝试使用动态 sql 时 它不允许我更新声明的变量 DECLARE v new rec SOME TABLE ROWT
  • GridView行重叠:如何使行高适合最高的项目?

    Like 前一个人 我在 GridView 项目之间有不需要的重叠 注意除了最右边的一列之外的每一列中的文本 我与上一个问题的不同之处在于我不想要恒定的行高 我希望行高变化为容纳最高的内容在每一行中 以有效利用屏幕空间 看着GridView
  • ##[警告]未找到 Visual Studio 版本“14.0”。回退到版本“15.0”

    我的项目需要使用 MSbuild 14 0 visual studio 2015 运行 但这仅需要 Visual Studio 2017 Community MSBuild 15 0 Bin msbuild exe I have insta
  • 显示 Google 图表中没有值的日期

    我有下面的脚本并且它运行完美 不过 也有可能有些日子没有订单 在这种情况下 日期仍应显示 但值应为零 就像上面一样 它从 06 19 跳转到 06 21 有没有办法仍然显示 06 20 并且将值设置为零 数据库中不存在缺失的日期 因为只有在
  • UWP 单元测试编译错误

    我正在将 WPF 项目迁移到 UWP 在 UWP 中设置新的单元测试项目时 当新的单元测试针对已迁移的项目 而该项目又依赖于解决方案中的另一个项目时 我会遇到错误 每个解决方案构建时都不会出现错误 Solution Explorer Com
  • 空 Div 导致非常奇怪的行为

    有这样的东西 div class something div div p Some text here p div 这全部在 XSL 模板中调用 由于某种原因 当它呈现时 我发现空的 div 永远不会关闭 这 p 它的内容在这个 div 内
  • 同时从麦克风录制音频并在Python中播放效果

    我的目标是通过笔记本电脑麦克风录制我的声音 并同时在 python 中添加效果 我需要的是类似于音乐效果踏板 您可以在其中连接吉他或麦克风 并添加混响 回声或失真等 我正在使用 pyaudio 和 wave 来录制和播放音频 使用 scik
  • 如何修复 Eclipse Java 虚拟机启动器错误?

    就像标题所说 我遇到了 eclipse JVM 启动器的问题 昨晚 一切正常 据我所知 从那时起我的电脑上没有任何变化 然而 今天早上我醒来发现 当我在 Eclipse 中运行任何项目时 我收到了这个错误 Java Virtual Mach
  • Android 删除本地化

    我在 Play 商店中的应用程序没有除默认版本之外的任何本地化版本 美国英语 这次我创建了一个新的apk来更新它 它使用android support v7 appcompat图书馆 因此 当我上传新的 apk 并在 apk 详细信息中显示
  • 为什么此查询会导致 Oracle 中的合并笛卡尔连接

    我最近有一个查询需要修改 这是原文 SELECT RTRIM position AS POSITION Other fields FROM schema table x WHERE hours gt 0 AND pay RGW AND NO
  • 将大量数据从 C# 导出到 Excel 的最佳/最快方法是什么

    我有使用 OpenXML 库导出数据的代码 我有 20 000 行和 22 列 这需要很长时间 大约 10 分钟 有没有任何解决方案可以将数据从 C 导出到 Excel 速度会更快 因为我是从 ASP NET MVC 应用程序执行此操作 而
  • IMFSinkWriter无法导出mp4的大尺寸视频

    我的 Windows MFC 应用程序具有导出视频文件的功能 并且它可以选择编码格式 通过WMV or MP4 和框架尺寸 但是 不幸的是当我尝试导出时MP4每次都设置大帧大小的文件MF E INVALIDMEDIATYPE发生了 简而言之
  • 正则表达式:按逗号分割,但排除括号和引号内的逗号(单引号和双引号)

    我有一根绳子 5 5 5 C A B A B B A A B C A B 我想用逗号分割它 但需要排除括号和引号内的逗号 单引号和双引号 像这样 5 5 5 C A B A B B A A B C A B 使用java正则表达式如何实现这一
  • AWS:将 Cognito 授权用户限制为特定 Lambda 函数

    我正在使用 AWS 并且有以下设置 UserPool API网关 Lambda函数 API 网关使用 UserPool 授权者来保护 lambda 函数 到目前为止 这是有效的 现在我想将每个 lambda 函数限制为特定的用户组 因此 我
  • Apple 的静默推送通知可以在后台启动我的应用程序吗?

    根据苹果的文档 我可以通过添加来注册静默通知 content available 1键值对aps有效负载字典 我希望我的应用程序在无声通知到达时在后台唤醒 我设置App downloads content in response to pu
  • 在 Azure ML 上安装附加 R 包

    我正在执行以下步骤将 R Hash 2 2 6 zip 包安装到 Azure ML 将 zip 文件作为数据集上传 创建一个新实验并添加 执行 R 脚本 进行实验 拖放 zip 文件数据集进行实验 将步骤3中的数据集连接到步骤2的 执行R脚
  • 泽西岛和 HK2 服务定位器

    我正在尝试在 Application 构造函数 从 ResourceConfig 继承的东西 中初始化 Jersey 应用程序中的一些组件 看起来像这样 public Application Context ServletContext c