在泽西岛的奇怪,奇怪的依赖注入世界中,您可以包含一个AbstractBinder
(但可能不只是一个Binder
)作为Application
的方法的返回值中的一个对象。在Jersey 2.X中,一个功能由HK2实例化。我如何使用我也添加的工厂?
这AbstractBinder
可以调用各种bind()
方法从configure()
方法,其中新泽西州,但没有其他JAX-RS实现中,是保证呼叫,因此你可以链接实现对接口,它可以让你做的假象从这一点开始依赖注入在你的应用程序中。也就是说,一旦你这样做了,那么你的资源类中的注入点就会被你所绑定的实现“填充”。
(您也可以与工厂类做到这一点,让你一个特定的工厂方法的返回值绑定到它实现合同。)
OK,挺好的。
Jersey还允许您将实施Feature
的Class
放入您的Application
的getClasses()
方法的返回值中。精细。这个Feature
类将由HK2在封面下实例化 - 请记住这一点! - 它的configure(FeatureContext)
方法将在某个时刻被调用。在那一点上,Feature
可能会通过调用FeatureContext#register()
来注册一些额外的东西,并将它交给任何想要注册的东西。 (想必这毕竟是一个相当复杂的FAç ADE上HK2的DynamicConfiguration
机器的顶部)
无论如何,因为Feature
由HK2(记住)实例,它遵循的是你可以@Inject
东西到它的构造,或在课堂其他地方有注射点。这很酷!然后HK2可以利用它所知道的所有服务来填补这些注入点。井井有条。
啊,但问题是:此时HK2世界的状况如何?什么服务可以注入到Feature
实现中,作为JAX-RS Application
的启动序列的一部分实例化?
如果您Application
的getSingletons()
方法返回一个AbstractBinder
实现,在其configure()
方法结合一个FooImpl
到Foo
在Singleton
范围,可以在Feature
- ‘注册’通过在您Application
的返回值及一流的getClasses()
方法 - 然后注入Foo
?
最后几句话很混乱。也许一些代码显示什么在工作,哪些不工作,以及你期望的工作将会有所帮助。 –
你说得很对。我会删除它们。粗体部分是我的主要问题。回顾一下:似乎在'AbstractBinder'中绑定的项目不可用于注入到“特征”中。有什么能说明这种行为应该是什么?在'AbstractBinder'实现''configure()'方法被调用之前'Feature'是否被实例化? –
我想它应该工作。我会测试它并看看。 –