- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想让 Jersey2 和 Guice 一起合作,这显然是相当困难的。我已经看到了一些解决方案,涉及使用 HK2-to-Guice 桥。但是桥靠得HK2ServiceLocator
init()
中的实例定制的 Jersey2 ServletContainer
为了初始化 GuiceBrige
:
public class MyServletContainer extends ServletContainer {
@Override public void init() {
ServiceLocator sloc = getApplicationHandler().getServiceLocator();
...
} }
getServiceLocator()
ApplicationHandler
中不再存在.在这种情况下我怎样才能得到它?
最佳答案
免责声明: 我不使用Guice,所以这不是我测试过的东西。所以我不知道 OP 正在尝试做的事情是否会奏效。我只是在回答如何获取 ServiceLocator 的主要问题。
如 my comment here 中所述,从 2.26 开始,Jersey 不再对 HK2 有硬依赖。因此,在整个代码库中,您将不再看到对 ServiceLocator
的引用,而是更高级别的 InjectionManager
。 InjectionManager
与 ServiceLocator
具有相同的目的,但抽象允许依赖注入(inject)提供程序的不同实现。这就是为什么在使用 2.26 时,我们需要添加 jersey-hk2
依赖。这是 InjectionManager
的 HK2 实现。在这个实现中,InjectionManager
将在适当的地方简单地将调用委托(delegate)给底层 ServiceLocator
。
话虽如此, ApplicationHandler
现在让您可以访问 InjectionManager
,而不是 ServiceLocator
。 ServiceLocator
本身就是一项服务,因此如果您有定位器,您可以执行以下操作(这毫无意义,但它只是说明了我的观点)
ServiceLocator locator = getServiceLocator();
locator = locator.getService(ServiceLocator.class);
InjectionManager
获取定位器,它只是底层定位器的高级委托(delegate)器
InjectionManager im = getApplicationHandler().getInjectionManager();
ServiceLocator locator = im.getInstance(ServiceLocator.class);
super.init()
方法中调用
init()
,否则当您尝试获取
ApplicationHandler
时会得到 NPE。这样做的问题是完成了很多初始化;几乎整个应用程序都已初始化。因此,尝试添加 Guice 集成可能为时已晚,也可能为时不晚。
init()
末尾执行此操作之前,它们都会被击中。
ResourceConfig
构造函数中,您可以在其中注入(inject) InjectionManager
。 Feature
中,您可以通过 InjectionManager
静态方法获取 InjectionManagerProvider
。 ComponentProvider
中,如 the docs 中所述。我见过的唯一实现是针对 Spring 的。您可以在 jersey-spring4 中查看源代码。这可能需要更多的工作,但我认为这将是最合适的位置,因为它在所有其他先前选项之前被调用。不过,这可能不是必需的,因为我已经看到其他人侥幸逃脱了其他两个选项。 关于guice - 如何在 Jersey2 ServletContainer 中获取 HK2 ServiceLocator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46825067/
我们正在使用 ExtrasUtilities.bridgeServiceLocator() 通过将应用 ServiceLocator 桥接到 Jersey ServiceLocator,将在一个 Se
我是基于 MVVM 的单元测试应用程序,它使用 prism 并使用模拟来测试 View 模型。我可以通过传递区域管理器和资源管理器的模拟对象来调用我的 viewmodel 类的构造函数,但是当控制进入
使用服务定位器与单例相比有哪些优点和缺点?我读过单例不好,但我想知道 s 服务定位器是否通常是一种更好的做事方式。 最佳答案 这两种方法都不好,因为从类契约中看不出它的依赖项是什么。也就是说, pri
我正在尝试在应用程序构造函数(从 ResourceConfig 继承的东西)中初始化我的 Jersey 应用程序中的一些组件。看起来像这样 public Application(@Context Se
最近看了Mark Seemann's article关于服务定位器反模式。 作者指出了 ServiceLocator 是反模式的两个主要原因: API 使用问题 (我对此非常满意) 当类使用服务定位器
我正在尝试创建一个可重用的组件,该组件从居民文件中定义的服务创建一个ServiceLocator。我需要确定 ServiceLocator 是否还有内置服务之外的服务。如果没有,也许会向用户记录一些警
最近看了Mark Seemann's article关于服务定位器反模式。 作者指出了 ServiceLocator 是反模式的两个主要原因: API 使用问题 (我对此非常满意) 当类使用服务定位器
我正在尝试为单元测试设置服务定位器,如下所示: var mockS = new Mock(); ServiceLocator.SetLocatorProvider(() => mockS.Object
我愿意: 使所有需要它们的类都可以看到通常需要的服务, 使用最少的样板文件,并且 不牺牲可测试性! 这是一个小项目,我认为 DI 可能有点矫枉过正,但也许我错了?反正我一直关注ServiceLocat
我 99% 的依赖是通过 @Autowired Spring 注解使用 DI 模式管理的。 尽管如此,在特定场景中,直到运行时我才能确定要使用哪个实现。 最广为人知的情况,是解析器的多重实现。 第一种
我有一个多模块 GWT 项目,我想使用 ServiceLocators。我有 3 个模块: “客户端”依赖于共享 “共享” “服务器”依赖于共享 我这样写了ServiceLocator: public
我正在对使用统一依赖注入(inject)框架的类进行单元测试。 这将返回 null: ServiceLocator.Current.GetInstance(); 我怎样才能让它返回一个模拟对象或只是对
有人知道 Microsoft.Practices.ServiceLocation 来自哪里吗?这是 MS EnterpriseLibrary 中使用的命名空间和 dll。诚然,这是一个非常简单的 dl
这是我的 previous question 的后续问题. 我正在尝试为我的 ServiceLocator 类编写测试用例,但它给了我以下错误: com/iplanet/ias/admin/commo
我使用了 axis Web 服务客户端向导 + 开发客户端 slider 来生成文件: Mage_Api_Model_Server_HandlerBindingStub Mage_Api_Model_
开始学习后一直在思考一个问题Prism ...为什么我们需要使用 Service locator如果我们有 MEF以满足所有需要的导入。 Common Service Locator link for
我开始使用 Prism 和 MVVM 开发一个 WPF 项目,我正在尝试使用 eventAggregator,但是当执行下面的行时会引发异常: IServiceLocator ob = Service
在我的 App.xaml.cs 中有 private void InitializeContainer() { var catalogs = new AggregateCatalog();
我有一个 J2EE webapp,用于上传文件,然后由数据库过程处理该文件。因为我们不希望 webapp 必须等到数据库过程完成,所以它在不同的线程中执行。 运行在独立线程中的进程需要获取并关闭自己的
我正在使用带有 RequestFactory 的 GWT 2.2。该应用程序有一个现有的服务层(服务器端),所以我使用 ServiceLocator 来提供这些实现。 My Proxy 和 Reque
我是一名优秀的程序员,十分优秀!