很抱歉问一个愚蠢的问题,但我对Java和Guice框架还是很新。我无法理解Guice Provider类的用途,该类提供了任何类的实例,与正常注入的实例相比具有压缩功能。据我所知,它允许您创建类的多个实例,而注入的实例始终是单例模式。这是唯一的区别还是还有其他区别?
例如:
@Inject
SomeClass someObjcet;
VS
@Inject
Provider<SomeClass> provider;
provider.get();
很抱歉问一个愚蠢的问题,但我对Java和Guice框架还是很新。我无法理解Guice Provider类的用途,该类提供了任何类的实例,与正常注入的实例相比具有压缩功能。据我所知,它允许您创建类的多个实例,而注入的实例始终是单例模式。这是唯一的区别还是还有其他区别?
例如:
@Inject
SomeClass someObjcet;
VS
@Inject
Provider<SomeClass> provider;
provider.get();
有三个不同的原因,你可能想要注入一个 Provider<T>
而不是仅仅注入 T
(请参见 Guice 文档):
Provider
实现中每次调用 get()
方法将(通常)返回依赖项的一个新实例。当这些实例持有可变状态时,这将非常有用(否则,当从多个线程访问时,依赖类可能会遇到并发问题)。get()
方法时才会创建对象,这由您的代码决定。User
对象。Provider<Injector>
比直接注入Injector
要快得多。 - electrotype
@Provides
方法和实现Provider<T>
(https://github.com/google/guice/wiki/ProviderBindings)之间的区别吗? - zaplProvider<T>
和@Inject
的区别。我已经编辑了问题以使其更清晰。 - Obaid Maroof