Java 谷歌番石榴供应商示例
请用合适的例子解释接口供应商(番石榴)的用法。这是一种提供间接对象的方法。每次调用Java 谷歌番石榴供应商示例,java,guava,Java,Guava,请用合适的例子解释接口供应商(番石榴)的用法。这是一种提供间接对象的方法。每次调用Supplier.get()时,您可能需要提供另一个对象 例如,我有一个名为smtpmailssender的单例类,它接受smtp服务器的主机名。但是,主机名可以在运行时更改,因此它不采用字符串主机名,而是采用供应商主机名查看类,我想那里的方法会以某种方式回答您的问题。供应商的另一个示例使用: 我们将供应商纳入Guava的主要原因是支持生成任意多重地图的方法,例如 public static <K,V>
Supplier.get()时,您可能需要提供另一个对象
例如,我有一个名为smtpmailssender
的单例类,它接受smtp服务器的主机名。但是,主机名可以在运行时更改,因此它不采用字符串主机名
,而是采用供应商主机名
查看类,我想那里的方法会以某种方式回答您的问题。供应商的另一个示例使用:
我们将供应商纳入Guava的主要原因是支持生成任意多重地图的方法,例如
public static <K,V> Multimap<K,V> newMultimap(Map<K,Collection<V>> map,
Supplier<? extends Collection<V>> factory)
publicstaticmultimap newMultimap(地图地图、,
SupplierSupplier
接口只是一个返回值的无参数函数的抽象……它是获取对象的一个或多个实例的一种方法。由于它非常通用,因此可以使用很多东西。Jared解释了多映射
工厂如何将其用作创建对象的新实例的工厂值的某种类型的集合
考虑到界面的简单性,它还允许通过将供应商
包装在另一个供应商
中,以某种方式改变其行为,从而对供应商的行为进行一些非常强大的修饰。记忆化就是一个例子。我自己也使用了供应商。记忆化膨胀
方法,这是一种简单的方法某些数据在给定的时间段内最多只能从服务器读取一次
我还建议您了解一下Guice以及如何在其中使用提供程序
接口。提供程序
完全等同于供应商
,是Guice工作的核心
Provider
允许用户定义创建给定类的新对象的自定义方式。用户可以编写get()
方法,该方法可以执行创建新对象所需的任何代码,因此它们不限于让Guice单独使用构造函数来创建对象。在这里,它们使用它为对象的新实例定义自定义工厂
- Guice允许注入任何依赖项的
提供程序
。这可能会在每次调用get()
时返回一个新实例,也可能总是返回一个实例或介于两者之间的任何内容,这取决于提供程序
表示的绑定的范围。这还允许“延迟实例化”对于依赖项,Provider
为类提供了一种创建对象的方法,而无需提前实际创建对象。在调用get()
之前,不需要创建对象的实例
- 如上所述,
Provider
s构成了Guice中作用域的基础。如果您查看该接口,您会注意到它的单个方法Provider scope(Key-Key,Provider unscoped)
是根据Provider
s定义的。该方法采用了创建对象新实例的内容(提供程序未指定范围
)并返回一个提供程序
,该提供程序基于作用域定义的任何应用策略,可能会返回对象的一些缓存实例,而不是创建一个新实例。默认的无作用域
作用域只会沿着无作用域
提供程序传递,这意味着每次都会创建一个新实例LETON
scope缓存第一次调用unscoped.get()的结果
然后返回该单个实例,确保依赖于单例作用域对象的所有对象都获得对该单个对象的引用。请注意,singleton
scope的scope
方法返回的提供程序
与返回的供应商
的操作基本相同>Suppliers.memoize
(虽然有点复杂)
类的另一个重要用途是解耦-如果一个组件只使用另一个组件来获取值,则不依赖于具体实现,而是依赖于此接口
无论如何,这里有一些示例代码:你知道供应商的记忆功能吗?如果知道,请也给出一个示例。@Emil:
memoize
get use例如。