java - 使用 Guice 的构造函数注入(inject)

标签 java dependency-injection guice

我有一些使用工厂的示例代码。我想通过删除工厂并改用 Guice 来清理代码。我试图这样做,但遇到了一个小障碍。我是 Guice 的新手,所以我希望有人能帮助我。

现有客户端代码(使用工厂):

public class MailClient {

    public static void main(String[] args) {
        MailConfig config = MailConfigFactory.get();
        config.setHost("smtp.gmail.com");
        Mail mail = MailFactory.get(config);
        mail.send();
    }
}

我尝试使用 Guice 进行重构:

//Replaces existing factories
public class MailModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(Mail.class)
        .to(MailImpl.class);

        bind(MailConfig.class)
        .to(MailConfigImpl.class);
    }
}

public class MailImpl implements Mail {

    private final MailConfig config;

    @Inject
    public MailImpl(MailConfig config) {
        this.config = config;
    }

    public void send() { ... }
}

public class MailClient {

    public static void main(String[] args) {
        MailModule mailModule = new MailModule();
        Injector injector = Guice.createInjector(mailModule);
        MailConfig config = injector.getInstance(MailConfig.class);
        config.setHost("smtp.gmail.com");
        Mail mail = //??
        mail.send();
     }
}

如何在修改后的 MailClient 中使用对象 config 构造 MailImpl 的实例?我应该以这种方式使用 Guice 吗?

最佳答案

看看AssistedInject .它似乎可以解决这个问题。

关于java - 使用 Guice 的构造函数注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2105895/

相关文章:

java - 如何将我在命令部分编写的句子保存到文本文件

java - 反转文件中的 block

gwt - 使用多个抽象模块实例化一个注入(inject)器

java - 具有依赖注入(inject)的两个单例实例(Google Guice)

java - Guice FactoryModuleBuilder 一个带有构造函数参数的实例

java - SelectOneMenu 不显示从我的数据库中提取的值

java - 从mysql数据库解析数据时出错

java - 如何在 Spring 中注入(inject)( Autowiring )bean 以枚举作为映射键进行映射?

design-patterns - DI 容器是服务定位器吗?

c# - 依赖注入(inject)