2021SC@SDUSC
core文件夹分析(3)
- CachingSource.java
-
- 1、总结
- 2、主要属性
- 3、方法
- 4、其他
CachingSource.java
1、总结
这个类实现了一个类似source的代理,它使用另一个source来获取内容。 此实现可以在给定的时间段内缓存内容。
继承自AbstractLogEnabled
实现了Serviceable, Initializable, XMLizable, Source接口
2、主要属性
- expires 参数的值包含一些额外的语义。 指定 -1 将产生始终被视为有效的缓存响应。 值 0 可用于实现完全相反的效果。 也就是说,缓存的内容会被立即无条件抛出并更新
- cache-fail 参数允许后续同步请求(必须刷新)在无法访问包装源的情况下失败,其默认值为 true
3、方法
- 使用元信息初始化缓存的响应,若无法初始化二进制响应抛出I/O异常
- 使用元和二进制内容初始化缓存的响应,若无法初始化二进制响应抛出I/O异常
- 根据freshMeta的值判断是否要刷新元
- 使用元、二进制和 XML 内容初始化缓存的响应
- 若在 xml 处理过程中出现问题,抛出 SAXException,若发生 IO 级别错误,抛出I/O异常,其他异常情况则抛出CascadingIOException
- 将元数据返回给source,若无法初始化元则返回默认元值
实现Serviceable接口
- Serviceable 是一个需要使用“角色”抽象连接到软件组件的类,因此不依赖于特定的实现,而是依赖于行为接口。
- 围绕 Serviceable 契约的主体是用户。 Serviceable 能够使用由它初始化的 ServiceManager 管理的对象。 作为与系统契约的一部分,实例化实体必须在 Serviceable 被认为有效之前调用服务方法
实现Initializable接口
- 初始化source,若后续请求永远不会失败,则保存响应,若相应无效则删除
- PS:Initializable 接口由需要在激活之前分配资源的组件使用,用来初始化组件,包括分配整个组件生命周期所需的任何资源
实现source接口
- 返回协议标识符,即 URI 中第一个 ‘:’ 之前的部分
- 这个方法可以用来获取负责这个对象的SourceFactory
- 获取source的内容长度,如果无法确定长度,则返回 -1
- 获取最后修改日期,时限为自格林威治标准时间 1970 年 1 月 1 日以来的最后一次修改(以毫秒为单位),如果未知则返回0
- 返回一个 InputStream 以从source读取,不可能为
- PS:如果这是可修改的,可能会从两个不同的调用中获得不同的内容。返回的流必须由调用代码关闭。
- 获取此对象描述的内容的mime类型,若无法确定则返回null
- 返回此源的唯一标识符url
- 获取有效性对象,可以包含上次修改日期或过期信息或描述此对象有效性的任何其他内容,若当前无法计算则返回null
- 刷新此对象并更新上次修改日期和内容长度,只创建缓存的对象,若不存在则清除缓存数据
- 仅当缓存内容过期时,此方法才会尝试刷新缓存的元数据和内容,即使source不存在,也要将该事实缓存
缓存如何工作strong>
第一次获得source对象时,只需通过 询问其内容,然后通过调用来获取有效性对象。(调用总是返回相同的对象)缓存算法现在可以将此Validity与source的系统标识符一起存储。下一次,缓存算法要检查缓存内容是否仍然有效,即再次检查其Validity值。
如果它仍然与第一次相同的source,则必须调用 才能丢弃source对象中存储的有效性。如果是新的source对象,调用refresh() 不应造成任何伤害。之后,可以通过调用检索最新的Validity。这可用于测试内容是否仍然有效,如源有效性文档中所歧视的内容。如果内容仍然有效,缓存知道该怎么做,如果没有,新内容可以使用 获得。因此,无论是在呼叫后,还是在获取”访问流”之后,Validity必须相同,直到调用刷新
XMLizable接口的实现
- 生成表示对象状态的 SAX 事件
- PS:如果实现可以产生词法事件,则应注意处理程序实际上可以是接受此类事件或直接实现 LexicalHandler 接口的 XMLConsumer
- 返回缓存source的 uri
- 从source读取 XML 内容并将其返回
- 从source读取二进制内容并将其返回
- 用于缓存source元信息的数据持有者
4、其他
构造器
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览93767 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!