gpt4 book ai didi

java - Guice injector.getInstance() - 好的做法?

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:18 27 4
gpt4 key购买 nike

假设我有两个应用程序共享同一个库。这个库包含公共(public)类,如 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.

那么,为这两个应用程序提供依赖注入(inject)而无需在 Guice 模块中手动绑定(bind)它们的最佳方法是什么?

最佳答案

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,要么不使用它并显式传递您的依赖项。好吧,以这种方式构建代码,这样您就永远不会直接创建类依赖项,而是通过构造函数传递它们,也可以称为“依赖项注入(inject)”,但我确定这不是您的意思。如果您不想在您的应用程序中使用 Guice,您将无法获得比 getInstance() 更好的东西,这很丑陋,尤其是因为您使用的是 static 包装器。

理想情况下,您的库应该提供一个模块,您可以通过 Guice.createInjector() 在您的应用程序中安装该模块,或者换句话说,该库应该提供一个 Injector 实例,您可以通过使用 createChildInjector() 并提供特定于应用程序的模块在您的应用程序中使用它。这种方法的轻微修改是将特定于应用程序的模块传递给库,以便它们将用于创建 Injector。我最近在自定义的类似 servlet 的接口(interface)上编写了基于 Guice 的 API,它使用最后一种方法根本不支持任何类型的 DI,而且它工作得很好。

在 servlet 或 Jersey 环境中使用 Guice 一点也不难。例如,后者与 Guice 具有开箱即用的集成(至少在 1.x 版本中)。桂思servlet extension也很好很方便。自己试试看吧。

关于java - Guice injector.getInstance() - 好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19311702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com