1

我正在编写一个使用 Guice 引导服务器的框架,因此我扩展了 GuiceAbstractModule以创建一个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 的人能否简要说明在使用注入器之前验证模块的最佳实践?

4

1 回答 1

1

我没有亲身经历太多,但在我看来,你有三个选择:

  • 如果您MyConvenienceMethodModule.myConfigure()MyConvenienceMethodModule.validate()便捷方法具有足够的表现力以提供有用的信息,而无需运行configure(). 从理论上讲,您可以Module.configure(Binder)使用模拟进行调用,但是使用 Guice 的 EDSL 太复杂了;改用ElementVisitor(下)。

  • 调用Elements.getElements()特定Module的以检查绑定状态。因为元素可能有多种类型,您可能想要创建一个ElementVisitor替代(可能通过创建一个子类DefaultElementVisitor来将您与尚未创建的未来元素隔离)。通过这种方式,您可以很好地查看所有绑定,甚至是 Guice 的 EDSL 中的绑定,同时仍在模块的上下文中。我认为这是你最好的选择。

  • 像往常一样创建您的注射器并致电getAllBindings()进行调查。如果您的配置的健全性取决于多个模块的交互方式,而不是单个模块的结构方式,这可能是您的最佳选择。如果您只在这一点上进行检查,您将无法真正区分一个模块与另一个模块。

于 2012-12-13T06:20:23.540 回答