问题标签 [hk2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - jersey + grizzly + hk2:依赖注入,但不注入资源
跟进Jersey + HK2 + Grizzly:注入 EntityManager 的正确方法?,我想了解如何在不是球衣资源的类中使用依赖注入。
例如,我可能在 ExecutorService 中运行后台任务,它们可能需要 EntityManager。如果我尝试@Inject将 EntityManager 放入类中,则没有任何反应。将其注入@Path-annotated jersey 资源类,注入工作正常。
该应用程序作为独立的 JVM 运行,而不是在 Java EE 应用程序服务器上运行。
更新:我创建了一个测试场景来证明我的意思。该代码正在运行一个带有 Jersey 资源的独立 Grizzly 服务器,以及一个 ExecutorService。ACallable被提交给 ExecutorService。
将 EntityManager 注入资源有效,但不能注入 Callable。EntityManager 仍然存在null。
请告知代码是否更好地保存在 github 上。
dependency-injection - 在依赖注入的上下文中,“reify”到底是什么意思
我已经阅读了几本关于不同 DI 框架的书籍,并且看到了“reify”或“reified”(过去时)这个术语,但我无法牢牢把握代码方面的实际含义。
维基百科定义状态
使(抽象的东西)更具体或更真实。
我还阅读了在(函数式?)编程的上下文中“具体化”和“具体化”是什么意思?,哪种在编程上下文中确认了上述定义。
但是我无法想象这在代码中是如何应用的(在 DI 的上下文中)。问题的原因是我试图通过查看一些 HK2 源代码来调试堆栈跟踪,并且我看到了变量/方法,reified例如if (!reified).
所以我想得到一个代码示例,说明什么时候没有具体化,什么时候/如何具体化,也许更好地解释上述定义如何在 DI 的上下文中应用。
注意:虽然这个问题被标记为hk2和cdi,但我想任何熟悉 DI 的人都可以回答这个问题,因为我认为这个术语与 Java DI 没有严格的联系。我在一本关于 Ninject(一个 C# 框架)的书中看到了这个术语。
java - ContainerRequestFilter with per-lookup-injectable 不是每个请求都注入
我在独立的 Grizzly 网络服务器上使用 Jersey 2。HK2 用于 CDI。我想获得一项将@PerLookup-scope 注入球衣的服务ContainerRequestFilter。
服务:
过滤器:
我的问题是这样的:
- 过滤器被实例化一次(在启动时)
- 服务注入一次(在过滤器启动时)
- 从那里下游的所有事情都在单例范围内有效地发生
问题:如何获得每个请求注入的服务?
更新
建议的使用方法@Inject javax.inject.Provider<SessionManager> sessionManagerProvider对我来说是合乎逻辑的,但sessionManagerProvider.get()返回 null。
hk2 serviceLocator 通过 inhabitant-generator 填充。它报告:
如果我添加显式绑定,那么它也会像这样找到:
第二次更新
我正在使用两个服务定位器:一个显式创建,并通过 HK2 居民生成器填充;和泽西创造的那个。它们通过BridgingInjectionResolver 连接。
当我将显式绑定添加到泽西岛的服务定位器时,@peeskillet 的响应有效。将绑定添加到其他服务定位器会导致上述结果(sessionManagerProvider.get()返回 null)。
java - 注入实例上的 Guice 空指针异常
我在 Jersey2 中使用 Guice 进行 DI(我想使用它,所以我可以使用 Google App Engine -> 不与 HK2 一起使用)。
我的应用程序资源:
NLPProvider 加载一堆文件 - 并且这些文件被正确加载。但是当我尝试注入 NLPProvider 的实例时,它保持为空。
Crwaler资源:
考虑到我以前使用过 HK2,我做错了什么?
我的 pom.xml - 也许问题来自这里:
dependency-injection - 使用 Jersey 和 HK2 将多个子类注入服务
AbstractTimerTask我有一个扩展的抽象类,TimerTask我有一个 Jersey 服务来管理这些计时器任务。我将有多个抽象类的实现,我希望它们都注入到服务中。如果可能的话,我希望能够将它们注入到 type 列表中List<AbstractTimerTask>。一个或多个子类可能不可用,具体取决于我部署到服务器的 jar 文件。我只想注入可注入的子类。出于这个原因,我不能只将服务类中的类列为单独的依赖项并自己构建列表。
是否可以将具有相同父类型的多个类注入该父类型的列表中?
java - 如何在泽西岛使用 supportNullCreation()?
我有一个可注入的提供程序,它可能会或可能会返回 null。当它为空时,我得到一个异常。我将提供程序注册为 Singleton,我是否可以将其注册为我自定义的 SingletonContext 类型,以便为 supportNullCreation() 返回 true?我想如果我能做到这一点,那么即使 findOrCreate() 返回 null,我的代码仍然会运行,这正是我想要的。
然后它是这样使用的:
我得到的例外是这个......
java - 具有接口类型和 InjectionResolver 的 HK2 工厂
在我的用例中,我需要开发一个自定义注释,以便我可以实例化 DAO 的实现。
所以我有界面:
和资源配置实现:
我坚持工厂实施:
当然,在这里我有我的 IDAO 实现:
我想要得到的结果是:
有没有办法将工厂连接到注入解析器,我可以获得真正的实现来提供?hk2 是否提供任何方法来做到这一点?
已编辑我可以有多个IDAO 接口实现......例如,如果我有:
我应该能够像这样获得第二个实现:
parent - HK2 InstantiationService nested inject
I m using hk2 as CDI engine. I have 2 nested injection as in the code below:
These are the Factory classes:
i bound both factory as: bindFactory(SonFactory.class).to(Son.class).in(RequestScoped.class) bindFactory(GrandSonFactory.class).to(GrandSon.class).in(RequestScoped.class)
Now i want just using the InstantionService.getInstantiationData() to get descriptor data from the calling parent inside the GrandSon class. In particular i need to rise back till to the calling Root class inspecting the injectee parent. I can get data from the factory.provide method of Son class, but i cannot get a valid getInstantiationdata() from grandSon class. What am i wrong with code?
dependency-injection - HK2 自定义注解 构造函数不允许注解
使用 HK2 注入框架,我开发了一个自定义注释,用于在我的类中注入我的自定义对象。
如果我将我的对象注释为类变量,一切正常:
现在我需要将我的对象作为构造函数参数注入,即:
在我的注入解析器中,我覆盖了:
为了返回真。
问题是当我尝试构建我的项目时,它会捕获一个错误消息:
我错过了什么?
java - 如何在嵌入式 Grizzly Jersey 应用程序的 main 方法中使用 HK2 注入对象
我在使用 Jersey 设计 REST 微服务时遇到了 22 个问题。我正在尝试创建一个带有嵌入式灰熊服务器的应用程序以降低部署复杂性。因此,我有一个创建灰熊服务器的主要方法。我需要在服务器的引导过程之前注入一些对象。
我的主要看起来像这样:
如何获取ServiceLocator单例实例以便注入我的应用程序对象?
我试过了:
但是,我需要将所有内容绑定AbstractBinder到它上两次(因为我已经在我的ResourceConfig.