java – Guice inject.getInstance() – 良好的做​​法?

前端之家收集整理的这篇文章主要介绍了java – Guice inject.getInstance() – 良好的做​​法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两个共享相同库的应用程序.该库包含常见的类,如DAO,Utils等.共享库中的所有内容都与Guice连接.我的两个应用依赖于这个库,但没有直接依赖于Guice.
______    ______    ______
|      |  |      |  |      |
| APP1 |->| LIB  |<-| APP2 |
'------'  '------'  '------'@H_404_3@ 
 

我目前使用这样的东西:

static <T> Utils.getInstanceOf (Class<T> type);@H_404_3@ 
 

这只是一个包装:

injector.getInstance (Class<T> type);@H_404_3@ 
 

但是,guice文件说:

When feasible,avoid using this method,in favor of having Guice
inject your dependencies ahead of time.

那么,为两个应用程序提供依赖注入的最佳方式是什么,而不必在Guice模块中手动绑定它们?

解决方法

So what’s the best way to provide dependency injection for the two
apps without having to manually bind them in a Guice module?

没有这样的方式.您完全接受Guice或者不使用它,并明确传递您的依赖项.那么,以这样的方式构造你的代码,所以你永远不会直接创建类依赖,而是通过构造函数传递它们,也可以称为“依赖注入”,但我确定这不是你的意思.如果你不想在你的应用程序中使用Guice,那么你将无法获得比getInstance()更好的东西,这是比较丑的,特别是因为你使用静态包装器.

理想情况下,您的库应该提供一个可以在应用程序中通过Guice.createInjector()安装的模块,或者另一方面,库应该提供一个Injector实例,您可以通过使用createChildInjector()和提供应用程序特定的模块.这种方法的轻微修改是将应用程序特定的模块传递到库,以便它们用于创建Injector.最近我已经编写了基于guice的API,而不是使用最后一种方法支持任何类型的DI,而且它工作正常.

在servlet或泽西环境中使用Guice并不是很难.例如,后者与Guice具有开箱即用的集成(至少在1.x版本中). Guice servlet extension也很好,方便.只要试一下,看看自己.

猜你在找的Java相关文章