gpt4 book ai didi

java - 根据参数注入(inject)一个类

转载 作者:行者123 更新时间:2023-12-01 22:47:18 27 4
gpt4 key购买 nike

我需要使用 Guice 构造一个 ApplicationContext 实例。我的大多数其他类都依赖于 ApplicationContext。但是,ApplicationContext 依赖于 public static void main 中可用的 args 数组。

目前,我必须创建 ApplicationContext 并手动调用 setter,然后在要求 Guice 创建其他对象之前使用 InjectMembers 注入(inject)它。当 Guice 依赖于 args 时,有没有更好的方法让我的对象创建?

ApplicationContext appContext = new ApplicationContext();
// configure my appContext from command line args
injector.injectMembers(appContext);
MyAppFoo a = injector.getInstance(MyAppFoo.class);
a.doThings();

最佳答案

这是一种方法:

class ApplicationContext {
@Inject @Named("args") String[] args;
}

class MyAppFoo {
@Inject ApplicationContext context;
}

class ApplicationModule extends AbstractModule {
private final String[] args;

ApplicationModule(String[] args) {
this.args = args;
}

@Override
protected void configure() {
bind(String[].class)
.annotatedWith(Names.named("args"))
.toInstance(args);

bind(ApplicationContext.class);
bind(MyAppFoo.class);
}
}

public class Application {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new ApplicationModule(args));
MyAppFoo a = injector.getInstance(MyAppFoo.class);
a.doThings();
}
}

关于java - 根据参数注入(inject)一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25148893/

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