Java 验证GUI模块配置-如何使用SPI?
我正在编写一个使用Guice引导服务器的框架,因此我扩展了Guice的Java 验证GUI模块配置-如何使用SPI?,java,validation,dependency-injection,guice,Java,Validation,Dependency Injection,Guice,我正在编写一个使用Guice引导服务器的框架,因此我扩展了Guice的AbstractModule来创建一个Module,它为用户配置代码提供了一些方便的方法。但是,我想在启动代码之前检查配置是否正常。所以它必须在这里的某个地方: // here, before the injector is created? Injector injector = Guice.createInjector(someModule); // here, after configure
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。有人提到使用guicespi来验证模块配置,但文档不太清楚。使用Guice的人能否简要介绍一下在使用喷油器之前验证模块的最佳做法?我没有多少亲身体验,但在我看来,您有三种选择:
- 如果方便的方法表达能力强,能够提供有用的信息,而无需运行
,则重构为configure()
和myconvencemethodmodule.myConfigure()
。理论上,你可以用mock调用Module.configure(Binder),但是用Guice的EDSL太复杂了;改为使用myconvencemethodmodule.validate()
(以下)ElementVisitor
- 调用特定的
,检查绑定状态。因为元素可能有多种类型,所以您可能希望创建一个(可能通过创建的子类来将您与将来要创建的元素隔离)。通过这种方式,您可以很好地查看所有绑定,甚至是Guice的EDSL中的绑定,同时仍然在模块的上下文中我想这是你最好的选择。模块
- 像往常一样创建喷油器,并致电调查。如果配置的合理性取决于多个模块的交互方式,而不是单个模块的结构,那么这可能是您的最佳选择。如果您只在这一点上检查,您将无法真正区分一个模块和另一个模块
- 如果方便的方法表达能力强,能够提供有用的信息,而无需运行
,则重构为configure()
和myconvencemethodmodule.myConfigure()
。理论上,你可以用mock调用Module.configure(Binder),但是用Guice的EDSL太复杂了;改为使用myconvencemethodmodule.validate()
(以下)ElementVisitor
- 调用特定的
,检查绑定状态。因为元素可能有多种类型,所以您可能希望创建一个(可能通过创建的子类来将您与将来要创建的元素隔离)。通过这种方式,您可以很好地查看所有绑定,甚至是Guice的EDSL中的绑定,同时仍然在模块的上下文中我想这是你最好的选择。模块
- 像往常一样创建喷油器,并致电调查。如果配置的合理性取决于多个模块的交互方式,而不是单个模块的结构,那么这可能是您的最佳选择。如果您只在这一点上检查,您将无法真正区分一个模块和另一个模块