Guice はプロバイダーのプロキシを挿入し、プロバイダーが使用されるまで実際のプロバイダー クラスの構築を遅らせる可能性があることに気付きました。
public static class Foo {
private final Provider<Bar> barProvider;
@Inject
public Foo(Provider<Bar> barProvider) {
this.barProvider = barProvider;
}
public Bar getBar() {
return barProvider.get();
}
}
public static class Bar {
@Inject
public Bar() {}
}
public static class BarProvider implements Provider<Bar> {
public BarProvider() {
System.out.println("BarProvider constructed");
}
@Override
public Bar get() {
return null;
}
}
public static void main(String[] args) {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Bar.class).toProvider(BarProvider.class);
}
});
Foo foo = injector.getInstance(Foo.class);
System.out.println("Foo created by Guice");
foo.getBar();
}
出力は
Foo created by Guice
BarProvider constructed
これはプロバイダー インジェクションでのみ発生しますか?それとも、非プロバイダー インジェクションでも発生する可能性がありますか? 循環依存が発生した場合、Guice はプロキシを使用する必要があることを理解しています。しかし、後者が真である場合、Guice は の最後にすべてが本当に構築されていることを保証できないことを懸念していますInjector.getInstance(some_class)
。