Java guice注入器使用的最佳实践
从Guice文档:Java guice注入器使用的最佳实践,java,dependency-injection,guice,Java,Dependency Injection,Guice,从Guice文档: public static void main(String[] args) { /* * Guice.createInjector() takes your Modules, and returns a new Injector * instance. Most applications will call this method exactly once, in their * main() method. */
public static void main(String[] args) {
/*
* Guice.createInjector() takes your Modules, and returns a new Injector
* instance. Most applications will call this method exactly once, in their
* main() method.
*/
Injector injector = Guice.createInjector(new BillingModule());
/*
* Now that we've got the injector, we can build objects.
*/
BillingService billingService = injector.getInstance(BillingService.class);
...
}
所以,在所有这些解决方法之后,如果我需要将BillingService的实例从主类中取出,我需要保持injector变量上的链接才能这样做
我的意思是,在另一节课上,我需要做这样的事情:
BillingService billingService = MainClass.injector.getInstance(BillingService.class)
获取BillingService的实例?这对我来说并不优雅,还有其他方法吗?这就是模块存在的原因 只需在
createInjector(…)
方法中添加几个模块
如果通过模块引用了其他类,则只需编写以下内容:
class PaymentService {
@Inject BillingService billingService;
}
我要做的是使用一个“应用程序”类启动一切,就像你有你的main
方法一样,就在Guice配置的类中。“在其他类中”你需要这样做,但是如果你能从injector
获取其他类的实例,您的另一个类可以将其dep表示为@Inject
字段或@Inject
构造函数参数。这使得Olivier的回答正确:除非您或您的框架在依赖项注入器之外创建对象,否则您不需要显式地保留或访问注入器。