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

假设我有两个共享相同库的应用程序.该库包含常见的类,如DAO,Utils等.共享库中的所有内容都与Guice连接.我的两个应用依赖于这个库,但没有直接依赖于Guice.
______    ______    ______
|      |  |      |  |      |
| APP1 |->| LIB  |<-| APP2 |
'------'  '------'  '------'

我目前使用这样的东西:

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

这只是一个包装:

injector.getInstance (Class<T> type);

但是,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也很好,方便.只要试一下,看看自己.

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写:&#160;一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...