缓存提供者CachingProvider

CachingProvider是Java缓存API的核心,用于获取和管理CacheManager。它允许通过URI标识和配置CacheManager,支持默认实例和特定配置。CachingProvider的实现可以通过ServiceLoader自动定位,其在Java EE环境中内部用于管理注入到应用程序的CacheManager。相同的CacheManager URI在分布式和本地缓存拓扑中会产生不同的效果。多个CachingProvider实现可以通过META-INF/services/javax.cache.spi.CachingProvider文件配置,但默认CachingProvider的选择在多个实现时可能会引发异常。
摘要由CSDN通过智能技术生成

缓存提供者CachingProvider

缓存提供者是Java缓存API的一个核心概念,它的作用是通过一个CachingProvider,开发者获得CacheManager,并通过CacheManager和缓存交互。

通过CachingProvider可以:

●获取默认的CacheManager实例。

●通过唯一确定的URI为标识,创建CacheManager实例。

         例如一个实现可能要求CacheManager声明一个类路径中指定的配置文件,据此允许实现通过路径装载资源。

cachingProvider.getCacheManager(“/sample/ConfigurationFile.xml”);

●通过URI和ClassLoader的范围界定管理CacheManager实例。

●关闭和释放指定的CacheManager或相关CacheManager的集合。

●查询CachingProvider实现的功能,包括对可选功能的支持。    

 

CacheManager的标识和配置

CacheManager在逻辑上由URI标识,被用来在一个CachingProvider的范围内创建这些CacheManager。而应用程序通常使用默认的URI作为定义的标识,并通过CachingProvider获取CacheManager,应用程序也可以使用特定的URI以支持CacheManagers的高级配置。

例如一个实现允许URI被用作定义配置文件的位置,通常用于预配置缓存。

cachingProvider.getCacheManager(“/sample/ConfigurationFile.xml”);

应用程序部署中以相同URI定义的两个或两个以上的CacheManager,在逻辑上是等同的,在实现上可以管理相同的缓存。

例如支持分布式缓存拓扑结构的两个应用程序,使用相同URI可以在逻辑上共享同一缓存的名称和内容。在这种情况下,在一个应用程序中更改缓存条目可能对其他应用程序是可见的。

但与只支持本地缓存拓扑结构的两个应用程序,使用相同的URI可以使得它们使用同一个缓存名称,但不会共享缓存的内容。在这种情况下,一个应用程序中更改缓存条目对其他应用程序是不可见的。

下表概述了CacheManage的URI针对同一名称的使用如何影响到缓存,仅支持本地(非共享)对比分布式(或共享)的缓存拓扑。

CacheManager URI

本地(非共享) 缓存拓扑

分布式/ 共享缓存拓扑

相同

缓存使用相同的配置。
可能拥有不同的条目。

缓存使用相同的配置。
可能拥有相同的条目。

不同

缓存可能拥有不同的配置。

可能拥有不同的条目。

缓存可能拥有不同的配置。

可能拥有不同的条目。

 

CachingProvider接口定义如下:

public interface CachingProvider extends Closeable {

  CacheManager getCacheManager(URI uri, ClassLoader classLoader, Properties properties);

  ClassLoader getDefaultClassLoader();

  URI getDefaultURI();

  Properties getDefaultProperties();

  CacheManager getCacheManager(URI uri, ClassLoader classLoader);

  CacheManager getCacheManager();

  void close();

  void close(ClassLoader classLoader);

  void close(URI uri, ClassLoader classLoader);

  boolean isSupported(OptionalFeature optionalFeature);

}

 

尽管可选,在Java SE环境中获取CachingProvider实例的主要手段是使用Caching引导类。

Caching引导类提供了三种机制,以便定位和实例化一个或多个CachingProvider:

●假定实现中被定义为一个服务,并通过使用一个java.util.ServiceLoader来解析它。
●允许开发人员通过设置javax.cache.CachingProvider的 Java系统属性定义所需的CachingProvider的完全限定类名来指定默认的实现。
●允许应用程序使用完全限定类名显式地定义CachingProvider。

虽然开发人员可以选择使用和具体技术相关的实现获取CachingProvider,但这样做能会降低CachingProvider实现之间的应用程序的可移植性。

在Java EE环境中,CachingProvider在内部使用,用以管理CacheManager,被用来注入所需的缓存到应用程序中。

CachingProvider的实现会由缓存引导类java.util.ServiceLoader自动定位,应用程序实现的CachingProvider必须依照JAR文件规范,在META-INF/services/javax.cache.spi.CachingProvider配置文件中定义CachingProvider的完全限定类名。

该javax.cache.spi.CachingProvider配置文件用于定义特定的CachingProvider缓存引导类的实现类,从而使其能够自动定位,加载,并为应用程序提供实例化请求。

javax.cache.spi.CachingProvider配置文件的内容简单地包含一个或多个完全限定类名,每一个单独的行中,指定一个可用的CachingProvider实现类名称。

例如:
一个Java缓存API实现者,ACME的缓存产品,附带一个名为acme.jar的JAR,里面包含了CachingProvider的实现。该JAR的内容中既包括CachingProvider实现类,又包含javax.cache.spi.CachingProvider配置文件。

META-INF/services/javax.cache.spi.CachingProvider

com/acme/cache/ACMECachingProvider.class

...

文件META-INF/services/javax.cache.spi.CachingProvider的内容仅仅包含下面一行实现类的名称:

com.acme.cache.ACMECachingProvider

应用程序可以使用多个CachingProvider实现,只要正确配置META-INF/services/javax.cache.spi.CachingProvider文件。当在多个CachingProviders的情况下,从缓存引导类要求返回默认的CachingProvider会导致抛出异常。

Caching缓存引导类方法定义如下:

public final class Caching {

  public static ClassLoader getDefaultClassLoader()

  public void setDefaultClassLoader(ClassLoader classLoader)

  public static CachingProvider getCachingProvider()

  public static CachingProvider getCachingProvider(ClassLoader classLoader)

  public static Iterable<CachingProvider> getCachingProviders()

  public static Iterable<CachingProvider> getCachingProviders(

      ClassLoader classLoader)

  public static CachingProvider getCachingProvider(String fullyQualifiedClassName)

  public static CachingProvider getCachingProvider(

             String fullyQualifiedClassName,

             ClassLoader classLoader)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值