[英]Validating guice module configuration - how to use the SPI?
我正在編寫一個使用Guice引導服務器的框架,因此我擴展了Guice的AbstractModule
以創建一個Module
,該Module
提供了一些方便的方法供用戶配置其代碼。 但是,我想在啟動代碼之前檢查配置是否正確。 所以它必須放在這里的某個地方:
// here, before the injector is created?
Injector injector = Guice.createInjector(someModule);
// here, after configure() is called?
Object something = injector.getInstance(SomeServer.class);
// start the server
在創建注入器之前,似乎沒有什么可以檢查的,因為還沒有configure()
模塊。 有人提到使用Guice SPI來驗證模塊配置,但是文檔不太清楚。 可以使用Guice的人簡短介紹使用噴油器之前驗證模塊的最佳做法嗎?
我沒有太多的第一手經驗,但是在我看來,您有三種選擇:
如果便捷方法的表達能力足以提供有用的信息而無需運行configure()
則可以重構為MyConvenienceMethodModule.myConfigure()
和MyConvenienceMethodModule.validate()
configure()
。 從理論上講,您可以模擬使用Module.configure(Binder)
進行調用,但是使用Guice的EDSL太復雜了。 請改用ElementVisitor
(如下)。
調用特定Module
上的Elements.getElements()
以檢查綁定狀態。 由於元素的類型可能多種多樣,因此您可能想創建一個ElementVisitor
(可能是通過創建DefaultElementVisitor
的子類來使您與將來要創建的Elements隔離)。 這樣,即使在模塊上下文中,您也可以很好地查看所有綁定,甚至包括Guice EDSL中的綁定。 我認為這是您最好的選擇。
照常創建您的Injector並調用getAllBindings()
進行調查。 如果配置的健全性取決於多個模塊的交互方式,而不是單個模塊的結構方式,那么這可能是最佳選擇。 如果僅在這一點進行檢查,您將無法真正分辨出另一個模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.