问题标签 [guice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何测试 Guice 注射?
我让 Google Guice 负责连接我的对象。但是,我如何测试绑定是否运行良好?
例如,假设我们有一个类A
,它有一个依赖B
。如何测试 B 是否正确注入?
请注意,A
没有getB()
方法,我想断言A.b
不是null
。
java - What is the correct stage to use for Google Guice in production in an application server?
It seems like a strange question (the obvious answer would Production, duh), but if you read the java docs:
Assuming a scenario where you have a stateless call to an application server, the initial receiving method (or there abouts) creates the injector new every call. If there all of the module bindings are not needed in a given call, then it would seem to have been better to use the Development stage (which is the default) and not take the performance hit upfront, because you may never take it at all, and here the distinction between "upfront" and "runtime performance" is kind of moot, as it is one call.
Of course the downside of this would appear to be that you would lose the error checking, causing potential code paths to cause a problem by surprise.
So the question boils down to are the assumptions in the above correct? Will you save performance on a large set of modules when the given lifetime of an injector is one call?
scope - 如何创建非基于线程的 Guice 自定义 Scope?
似乎所有 Guice 开箱即用的 Scope 实现本质上都是基于线程的(或完全忽略线程):
Scopes.SINGLETON
并Scopes.NO_SCOPE
忽略线程并且是边缘情况:全局范围和无范围。
ServletScopes.REQUEST
并ServletScopes.SESSION
最终依赖于从ThreadLocal<Context>
. 检索Context
到的HttpServletRequest
包含对 的引用,该引用包含对存储为命名属性(其中名称派生自com.google.inject.Key
)的范围对象的引用。
自定义范围 Guice wiki 中的类还使用成员变量SimpleScope
提供了每个线程的实现。ThreadLocal<Map<Key<?>, Object>>
有了这个序言,我的问题是:如何创建一个非基于线程的作用域?似乎我可以用来查找 aMap<Key<?>, Object>
的东西丢失了,因为传入的唯一东西Scope.scope()
是 aKey<T>
和 a Provider<T>
。
在此先感谢您的时间。
java - 从 java 构造函数调用实例方法是好还是坏?
有几种不同的方法可以初始化复杂对象(使用注入的依赖项和所需的注入成员设置),看起来都很合理,但各有优缺点。我举一个具体的例子:
如您所见,构造函数做了 3 件事,包括调用实例方法。我被告知从构造函数调用实例方法是不安全的,因为它绕过了编译器对未初始化成员的检查。即我可以doSomething(0)
在设置之前调用this.dependency
,这会编译但不起作用。重构它的最佳方法是什么?
制作
doSomething
静态并显式传递依赖项?在我的实际情况中,我有三个实例方法和三个成员字段,它们都相互依赖,所以这似乎是使所有这三个静态化的大量额外样板。将
addHandler
and移动doSomething
到一个@Inject public void init()
方法中。虽然与 Guice 一起使用是透明的,但它需要任何手动构造以确保调用init()
,否则如果有人忘记,该对象将无法完全发挥作用。此外,这暴露了更多的 API,这两者似乎都是坏主意。包装一个嵌套类以保持依赖关系,以确保它在不暴露额外 API 的情况下正常运行:
这会将实例方法从所有构造函数中提取出来,但会生成一个额外的类层,当我已经有内部和匿名类(例如那个处理程序)时,它可能会变得混乱 - 当我尝试这个时,我被告知将其移动DependencyManager
到一个单独的文件,这也令人反感,因为它现在是多个文件来做一件事情。
那么处理这种情况的首选方法是什么?
android - 使用 Guice 将依赖项注入 Android 活动的构造函数
有人知道使用 Guice 将依赖项注入 Android 中 Activity 的构造函数的方法吗?看起来活动通常只有默认构造函数,以便平台可以轻松创建新实例。虽然拥有一个单例来引用注入器并获取依赖项很容易,但它不太干净并且引入了一些静态状态。
有什么建议么?
java - 实现依赖注入的最简单方法是什么?
我一直在阅读有关 Spring 的文章,尽管它声称它是 EJB 的一种不太复杂的替代方案,但我很难理解它。有没有比采用 Spring 方法更简单的实现依赖注入的方法?
java - 在使用 DI 框架的项目中,您是否应该从不使用“新”运算符?
我正试图围绕依赖注入。
我感到困惑的一件事是您的所有对象实例化是否都需要由 DI 框架(Spring、Guice 等)控制。
或者,如果不是,您如何确定哪些对象由框架实例化,哪些对象由new
操作符实例化?
java - 使用 Guice 注入泛型
我正在尝试迁移一个小项目,用 Guice 替换一些工厂(这是我的第一次 Guice 试用版)。但是,我在尝试注入泛型时被卡住了。我设法提取了一个带有两个类和一个模块的小玩具示例:
当我运行这个例子时,我得到的是:
线程“主”com.google.inject.CreationException 中的异常:Guice 创建错误:
我尝试查找错误消息,但没有找到任何有用的提示。在 Guice FAQ 上,我偶然发现了一个关于如何注入泛型的问题。我尝试在configure
方法中添加以下绑定:
但没有成功(同样的错误信息)。
有人可以向我解释错误消息并提供一些提示吗?谢谢。
java - Java 包扫描器 - 查找具有给定接口的所有类
在 C# 中,您可以轻松地从给定程序集中读取所有类。
我正在寻找 Java 中的等效功能。我需要它来自动将 EJB bean 绑定到我的 Guice 模块。