很抱歉提出愚蠢的问题,但我对Java和Guice框架很陌生。我无法理解Guice Provider类的使用,它提供了正常注入实例的任何压缩类的实例。据我所知,它允许您创建一个类的多个实例,其中Injected实例始终是Singleton。这是唯一的区别还是还有什么呢?
即。 区别:
@Inject
SomeClass someObjcet;
VS
@Inject
Provider<SomeClass> provider;
provider.get();
答案 0 :(得分:7)
您可能希望注入Provider<T>
而不仅仅是注入T
(请参阅Guice's documentation)有三种不同的原因:
get()
实现中对Provider
方法的每次调用都会(通常)返回依赖项的新实例。当所述实例保持可变状态时,这将非常有用(否则,当从多个线程访问时,依赖类可能会遇到并发问题)。get()
方法,则该对象将仅创建,这由您的代码决定。User
对象。