在澤西島的奇怪,奇怪的依賴注入世界中,您可以包含一個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'是否被實例化? –
我想它應該工作。我會測試它並看看。 –