【问题标题】:Validating guice module configuration - how to use the SPI?验证 guice 模块配置 - 如何使用 SPI?
【发布时间】:2012-12-12 18:32:42
【问题描述】:

我正在编写一个使用 Guice 引导服务器的框架,因此我扩展了 Guice 的 AbstractModule 以创建一个 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()ed。有人提到使用 Guice SPI 来验证模块配置,但文档不太清楚。使用 Guice 的人能否简要说明在使用注入器之前验证模块的最佳实践?

【问题讨论】:

    标签: java validation dependency-injection guice


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多