gpt4 book ai didi

java - 如果您的模块本身将参数作为构造函数传入,如何注入(inject)依赖项?

转载 作者:行者123 更新时间:2023-11-30 02:24:31 25 4
gpt4 key购买 nike

我刚刚了解了依赖注入(inject) (DI),并且开始喜欢它。为了注入(inject)依赖项,我使用 Google Guice 框架。从概念上讲,一切都运行良好,但在编写模块时,我想到了一个想法:如果我的模块需要依赖项作为构造函数怎么办,毕竟它只是一个扩展 AbstractModule 的类。所以,基本上,我总共有3个模块。

  • 环境模块

    public class EnvModule extends AbstractModule {
    @Override
    protected void configure() {
    install(new Servicemodule());
    }
    }
  • 服务模块

    public class ServiceModule extends AbstractModule {
    private final boolean isEnabled;
    @Override
    protected void configure() {
    if (isEnabled) {
    install (new ThirdModule());
    }
    }
    • ThirdModule(它在任何构造函数中都不接受任何参数,并且有自己的一些绑定(bind))
<小时/>

基本上,服务模块中的变量定义了我的应用程序是否需要安装第三个模块。该变量是在应用程序配置文件中定义的。那么如何在 ServiceModule 中注入(inject)该变量呢?由于字段是final的,所以无法进行setter注入(inject),有没有办法使用构造注入(inject)或字段注入(inject)来注入(inject)值。

最佳答案

我看到以下选项:

  • 使用系统变量:

    ServiceModule() {isEnabled = System.getProperty("isThirdModuleEnabled")};

  • 直接在 ServiceModule() 构造函数中读取配置文件
  • 使用@Provides:

    类 ServiceModule ... {
    @Provide @Singleton ThirdModuleParam getThirdModuleParam(...) {
    //读取配置文件
    ThirdModuleParam res = new ThirdModuleParam();
    res.setIsEnabed(...);
    返回资源;
    }
    }
    第三模块类 {
    @Provide SomeThirdModuleClass getIt(ThirdModuleParam param) {
    返回 param.isEnabled() ?新的 SomeThirdModuleClass() : null;
    }

关于java - 如果您的模块本身将参数作为构造函数传入,如何注入(inject)依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45986643/

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