加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – 在哪里保留guice注射器?

发布时间:2020-12-14 05:00:39 所属栏目:百科 来源:网络整理
导读:你有什么建议? 我发现最适合我的解决方案 – 在枚举类中保留注入器和模块. 好处: 一次创建注射器和模块, 可以在运行应用程序时使用不同类的注入器(不仅仅是在引导程序中), 注射器保存在一个地方,很容易找到. 例: import static ru.package.Modules.*;publ
你有什么建议?

我发现最适合我的解决方案 – 在枚举类中保留注入器和模块.
好处:

>一次创建注射器和模块,
>可以在运行应用程序时使用不同类的注入器(不仅仅是在引导程序中),
>注射器保存在一个地方,很容易找到.

例:

import static ru.package.Modules.*;

public enum Injectors {

FOO_INJECTOR(BarModule.module()),FOO2_INJECTOR(FOO_INJECTOR.injector(),Bar2Module.module(),FooModule.module());

private final Injector m_injector;

Injectors (Module... modules) {
    m_injector = Guice.createInjector(modules);
}

Injectors (Injector parentInjector,Module... modules) {
    m_injector = parentInjector.createChildInjector(modules);
}

public Injector injector() {
    return m_injector;
}
}

解决方法

您似乎从根本上误解了依赖注入的工作原理.如果您尝试在代码中的任何位置使用对Injector的引用,那么除了引导应用程序的位置之外,您还没有使用依赖项注入,而是将其用作服务定位器.每当你需要测试一个类时,你就不得不准备一个Injector,而你的类并没有在它们的构造函数中明确说明它们的依赖关系(因为谁知道如果有的话,他们会从某些方法中获取它们的内容)或者可以参考它).实际上,正如您在此处所描述的那样使用枚举甚至比这更糟糕:您甚至无法更改配置,即使是测试,因为您的模块已硬编码到枚举中.

通过依赖注入,类仅声明它们的依赖项,并允许Injector透明地工作(在初始调用之后获取根应用程序对象),以提供所有这些依赖项.这使得在代码中理解,测试和更改功能相对容易.无论如何,我建议更多地了解如何使用DI和Guice ……你真的不应该这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读