快速业务通道

AOP@Work: 使用AspectJ 5检验库方面 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
些内容,但必须 解释 CacheMethodResult 复合键。然而,CacheMethodResult 将自己的范围限 于 方法结果,从而使子方面编写程序可更容易地编写切入点。因此它无法直接缓存 字段值。

有了 CachedItem,Holly 就可以在获取字段、从方法或构造器调用处返回值 时缓存任何内容。但方面没有映射,而是假定切入点可准确地识别值。若编写了 错误的切入点,就会导致两个值相混合。

Holly 非常喜爱缓存方面,但这些方面均要求以手动方式使缓存无效,这让 她 不太满意。Zed 也对此不满。尽管有无缓存,系统都可运行,但只要有依靠缓存 方面清除缓存的地方存在,缓存方面就不可移除。

追求平静的 Irene 实现幂等方法

Irene 不喜欢变化,也不喜欢为之努力抗争。与 Holly 一样,她也希望提高 性能。她希望您能帮助她回避幂等(Idempotent) 方法,若多次使用这些方法 ( 例如,在打开已开放的资源或关闭已关闭的资源时),则不会产生任何效果。您 编写了两个方面,均可跳过已运行的方法。两者在关联方面有所不同,与缓存类 似。

表 5. Idempotent 方法管理方面

IdempotentMethod 特定方法的 pertarget
IdempotentMethods 按各方法映射键

这些方面使用各方法上的注释,Buddy 对此感到非常兴奋。Iren 希望将代码 中的方法标识为幂等,以使开发人员得知不应对该属性进行更改。若她在一个切 入点中枚举了方法,则他人可能会更改或重命名方法。有了注释,所有人都会得 到通知,保留其幂等性。系统可在不需任何人更新方面的情况下实现更改,Zed 对此表示满意。

AOP@Work: 使用AspectJ 5检验库方面(8)

时间:2011-09-07 IBM Wes Isberg

Holly 再寻基于注释的缓存

Holly 依然对缓存方面不够满意,又回来找您。如果缓存项目以期待的生存 期 注释自己,又该怎么办呢?例如,产品描述过时 5 分钟无关紧要,但拍卖价格 必 须准确到分,乃至秒。若缓存方面可读取本信息,就可在指定时期后使自己的缓 存失效。

您告诉她这是可行的。这里有两个标记了其结果生存期的方法:

清单 8. 生存期注释

@TimeToLive(300) public String getName() // ... @TimeToLive(100, TimeUnit.MILLISECONDS) public Price getPrice() // ...

清单 9 展示了使用注释值确定何时清除缓存的 TimedCacheItem 方面:

清单 9. 在生存期后清除缓存

Result around(TimeToLive ttl) : @annotation(ttl) && results() {   Result result;   // long nanoBirthTime set when cached   if (0 != nanoBirthTime) {    // calc time to clear cache from annotation duration    long lifeTime = ttl.timeunit ().toNanos(ttl.value());     long deathTime = nanoBirthTime + lifeTime;     if (deathTime < System.nanoTime()) {       clear();     }   }   // ...

这个解决方案得到了 Zed 的认同。若方面被移除,缓存也随之清除,但没有 其他任何东西负责使方面缓存失效。此外,最好由方法开发人员去估计缓存期。

所有人看上去都很满意,但 Connor 突然提议实现更高的灵活性。若存在两 个 访问点,则同一个值拥有另外一种不同的生存期是完全可能的。例如,参与拍卖 的人希望为其价格使用短期点,系统管理员则希望使用长期点来计算总和(因为 细微的价格误差不会影响总和)。采取这种方式也就意味着总和通常不会清除缓 存,且会降低系统运行速度。Connor 的提议形如清单 10 所示:

清单 10. 按访问区别的生存期

@TimeToLive(100, TimeUnit.MILLISECONDS) public Price getPrice() // ...  @TimeToLive(5, TimeUnit.MINUTES) p

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号