【发布时间】:2013-02-07 10:09:23
【问题描述】:
我正在使用 guice 3 和 guice-servlet 3。在模块中,我定义了这种类型的绑定:
[...]
bind(View.class).annotatedWith(Names.named("view1")).to(View1Impl.class);
bind(View.class).annotatedWith(Names.named("view2")).to(View2Impl.class);
[...]
在注入的类 View1Impl 中我定义如下:
public class View1Impl {
@Inject @Named("view1") Provider<View> viewProvider;
@Inject
void init() {
View viewA = viewProvider.get();
View viewB = viewProvider.get();
log.debug(viewA == viewB);
log.debug(viewA == this);
}
}
两个语句都返回 true。但事实并非如此。
我做错了什么?
【问题讨论】:
-
你的构造函数在哪里,
get方法到底是做什么的? -
@Danyel 没有构造函数,因为我不需要构造函数。实例被注入。还有提供者。见code.google.com/p/google-guice/wiki/InjectingProviders你真的知道什么是依赖注入吗?你熟悉 guice 吗?
-
我是,但你的例子真的很奇怪。您正在递归地注入您的
Provider。您实际上很幸运,它返回了相同的实例(尽管这也有些奇怪),因为否则您将进入无限循环。当你尝试:System.out.println( injector.getInstance( View.class ) == injector.getInstance( View.class ) );,false被返回。也许有人可以解释一下。 -
这是我的问题,因为我认为应该返回 false。但是我通过进入无限循环来理解你的观点。我可能会通过不急于加载视图来解决我的问题。也许 guice 会进行循环检测。
标签: java dependency-injection guice guice-servlet