如果要使用“加载程序”,则应实现com.google.inject.Provider.查看http://code.google.com/p/google-guice/wiki/InjectingProviders的示例
您不需要自己注入提供程序,您可以配置模块以注入提供程序创建的对象:
public class PanelModule extends AbstractModule {
@Override
protected void configure() {
bind(Panel1.class).toProvider(Panel1Provider.class);
}
private static class Panel1Provider implements Provider {
private Panel1 panel1;
@Override
public Panel1 get() {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
panel1 = new Panel1();
}
});
} catch (InvocationTargetException e) {
throw new RuntimeException(e); // should not happen
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
return panel1;
}
或者,如果每个组件仅需要一个实例,则可以将实例直接绑定到类型:
public class PanelModule extends AbstractModule {
Panel1 panel1;
Panel2 panel2;
@Override
protected void configure() {
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
panel1 = new Panel1();
panel2 = new Panel2();
}
});
} catch (InvocationTargetException e) {
throw new RuntimeException(e); // should not happen
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
bind(Panel1.class).toInstance(panel1);
bind(Panel2.class).toInstance(panel2);
}