当应用进程创建 RxCache 的实例后,会给应用进程返回一个 rxcache实例及一个 ProxyProvider,代码如下:

CacheProviders providers = new RxCache.Builder().persistence(cacheDirectory).using(CacheProviders.class);

using之前的代码返回的就是 rxcache 实例, using返回的是一个proxy实例。

这句调用会进入了rxcache的源码实现里,using的实现代码会创建一个 ProxyProviders,它是一个 InvocationHandler, 将代理执行 CacheProviders 的所有函数调用,具体代理是ProxyProviders类的invoke调用,例如外部应用程序调用CacheProviders.getDataFromUrl(),则会立即被ProxyProviders类的invoke截获,将invode的第一个参数赋值为外部发起调用的object,将invoke的第二个参数赋值为调用的函数getDataFromUrl,将invoke的第三个参数赋值为外部调用的调用参数。

创建这个 ProxyProviders 的过程中就会创建一个 ProxyTranslator,这个proxytranslator就会调用 getLifeTimeCache 从annotation初始化duration。

之后,若数据从外部获取成功,这个lifetime会被传送到TwoLayersCache的save()调用里,继而传送到SaveRecord的save调用,最后被存到持久化(lifetime一并被持久化,持久化采用的是json格式)。

获取数据的时候,会调用ProcessorProvidersBehaviour的getData,然后调用TwoLayersCache的retrieve,然后调用 RetrieveRecord 的retrieveRecord,在这个调用里,先从持久化里获取到先前保存的Record(包括先前的lifetime),但是从annotation传过来的lifetime会将Record从持久化里获取的lifetime替换掉,然后利用这个lifetime检查缓存是否过期。

我们可以将 RxCache->ProxyProviders->ProxyTranslator 的传递过程添加一个修改lifetime的接口,让外部可以定义ProxyTranslator的getLifeTimeCache函数,这样达到随时修改lifetime的目的。

RxCache 的代码分析,含缓存时间duration的在代码中改变的自己实现的机制的更多相关文章

  1. python的MetaClass的代码分析。基于廖雪峰博客代码

    # 一张表一个类,表内每一行就是一个实例 ''' 一个单独的元类使用的程序分析. ''' class Field(object): def __init__(self, name, column_ty ...

  2. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  3. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(3)

    这个系列已经写了5篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Auto ...

  4. [转载] 常用 Java 静态代码分析工具的分析与比较

    转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代 ...

  5. 2018-2019-2 《网络对抗技术》Exp4 恶意代码分析 Week6 20165311

    2018-2019 20165311 网络对抗 Exp4 恶意代码分析 2018-2019 20165311 网络对抗 Exp4 恶意代码分析 实验内容 系统运行监控(2分) 恶意软件分析(1.5分) ...

  6. Exp4 恶意代码分析 20154320 李超

    恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. ...

  7. 20155326《网络攻防》Exp4 恶意代码分析

    20155326<网络攻防>Exp4 恶意代码分析 基础问题回答: 1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪 ...

  8. 【转载】常用 Java 静态代码分析工具的分析与比较

    摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后 ...

  9. Exp4 恶意代码分析 20155223

    Exp4 恶意代码分析 20155223 使用原生命令schtasks监视系统运行 在系统盘目录下建立脚本文件netstatlog.bat,包含以下命令: date /t >> c:\ne ...

随机推荐

  1. 关于何时view.setLayoutParams(params);

    1,从view得到LayoutParams  params LayoutParams params = view.getLayoutParams(); 2,可以从用params.height得到当前v ...

  2. Ajax的简单请求案例

    $.ajax({ url : rootPath +'/jasframework/choosepilecontrol/querySubsytem.do', type : "POST" ...

  3. js控制div是否显示

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  4. mysql数据库导入外键约束问题

    在网站搬迁过程中,很重要一点是数据的迁移.你的数据库可能已经包含了一个设计良好的数据表集合,并且在网站运营过程中,产生了重要的数据.这时你必须做好包含数据表schema以及数据本身的迁移. 完成上述数 ...

  5. UVa 11039 (排序+贪心) Building designing

    白书上的例题比较难,认真理解样例代码有助于提高自己 后面的练习题相对简单,独立思考解决问题,增强信心 题意:n个绝对值各不相同的非0整数,选出尽量多的数排成序列,使得该序列正负交错且绝对值递增. 解法 ...

  6. Zookeeper工作原理

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...

  7. WebForm页面运行机制

    阅读目录 开始 WebForm前台与后台的关系及运行原理 前台页面 <% @ Page Language="C#" AutoEventWireup="true&qu ...

  8. mysql连接超时

    这几天在跟踪一个项目的时候,老是发现mysql连接报timeout的异常. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException ...

  9. 【阅读】提问的智慧+有效的报告BUG

    这两项可谓是我们测试人员的基本要求了,不过实话说的是,我自己这两方面很薄弱.哎!!! 这两篇文章都看过了,不过我在这也记个笔记吧.督促自己!!! <提问的智慧> <如何有效地报告Bu ...

  10. ORA-10456:cannot open standby database;media recovery session may be in process

    http://neeraj-dba.blogspot.com/2011/10/ora-10456-cannot-open-standby-database.html   Once while star ...