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

当前,我必须创建ApplicationContext并手动调用setter,然后在要求Guice创建其他对象之前将其注入injectMembers。当它取决于args时,是否有更好的方法让Guice创建我的对象?

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

最佳答案

您可以使用提供程序或提供程序方法构造ApplicationContext并对其进行配置,然后再参与其他注入:

public static void main(String[] args) {

    Injector injector = Guice.createInjector(b -> {
        b.bind(ApplicationContext.class).toProvider(() -> {
            // construct and configure application context
            ApplicationContext ctx = new ApplicationContext();
            ctx.setSomething(args[0]);
            ctx.setSomethingElse(args[1]);
            return ctx;
        }).in(Singleton.class);
    });

}

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

10-11 02:35