- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设我有两个应用程序共享同一个库。这个库包含公共(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/
我正在按照本教程创建 Singleton,所有者在以下方法时有评论 http://www.journaldev.com/1377/java-singleton-design-pattern-best-
package com.example.vivanksharma.firebase; import android.support.v7.app.AppCompatActivity; import a
自从首次引入它来替换 Date 以来,我一直在使用静态方法 Calendar.getInstance() 来获取新的 Calendar目的。我从来没有遇到过问题,但出于某种原因我只是想知道使用 Gre
我正在使用适用于 Windows 8 的 MVVM Light 第 4 版;它包括 SimpleIOC。在各种示例中,我有时会看到基于 SimpleIoc 请求对象的代码......有时它基于 Ser
我看过这个post关于注册泛型类型。 如何注册的示例: bind(new TypeLiteral>() {}).to((Class>) ResponseDal.class); 但是如何从注入(inj
我想在我的 unitTest 中从 Guice injector 注入(inject)一个实例。 我可以使用哪个微分器? 我知道构造函数参数中使用了@annotation机制 但是 junit 不允许
我正在使用静态实例对象来获取与应用程序中另一个 Activity 相关的数据。但这会导致内存泄漏。 public class ChartActivity extends AppCompatActivi
以前用过C#,我考虑过 Calendar cal = Calendar.getInstance(); 根据 GoF 成为单例方法 Singleton pattern (Wikipedia)我想知道如何
我很难找到以对性能最友好的方式使用单例类的正确方法。我有 3 种方法,也许有人可以向我解释最有效的方法: 1: public functionA() { SingletonClassA.get
最近我阅读了一些使用广泛遵循 getInstance() 方法的 C++ 代码: class S { private: int some_int = 0; public
许多公开可用的 Java API 似乎都使用 getInstance 来生成和返回对象。我很好奇为什么会这样——为什么不直接使用默认/参数化构造函数呢? 是否有关联的设计模式? 最佳答案 我建议阅读
我遇到过单例模式。我无法理解 singletonobj.getinstance().dosomething() //1st one 和 singletonobj.dosomething() //2nd
getInstance() 在 Java 中的作用是什么? 在我的研究过程中,我一直在读到 getInstance() 有助于实现单例设计模式(据我了解,这意味着整个程序中只有一个实例)。但是我不能只
Firebase Firestore 提供 getInstance()方法,它打开一个套接字(在应用程序执行的任何时候只有一个)并实例化 Firestore 客户端。 我想查询和存储数据,使用或不使用
我正在将一个表单组件放入 joomla.In 中,我将在其中放置一个文本框、一个编辑器和一个按钮。 我为此表单创建了 View 文件,并且组件已成功安装。但是当我单击以在前端显示此表单时,会出现如下错
我正在尝试跟踪人们是否从广告或其他地方找到了我的 Android 应用。所以我发现谷歌分析可以通过这个表单生成的精心构建的 url 来跟踪它: http://code.google.com/mobil
我观看了此视频(https://www.youtube.com/watch?v=idb6hOxlyb8),该视频是2013年8月上传的。它声称我们应该使用 ptor.get(url) 而不是 brow
创建 google-service.json 后运行示例时,应用在尝试在 SignInActivity 中获取数据库引用时崩溃 mDatabase = FirebaseDatabase.getInst
基于以下问题:Decimal point or decimal comma in Android我尝试获取设备中使用的小数点分隔符。我正在使用Kotlin,因此我的代码如下所示: import and
从 Fabric Crashlytics 迁移到 FirebaseCrashlytics SDK 后,我在另一个进程(不是主进程)上遇到了一些崩溃。 当在 Activity 中调用 FirebaseC
我是一名优秀的程序员,十分优秀!