快速业务通道

AOP@Work: AOP和元数据:完美的匹配,第2部分-用元数据实现多维接口 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
、 线程安全、安全性等方面。

3. 利用为其他目的而存在的注释

方面可以利用服务于不同目的的元数据注释。例如,Enterprise JavaBeans (EJB) 3.0 注释允许您基于与事务、安全性和方法角色编写切入点(即 remove、 init 等)。Hibernate 注释允许您基于表、列名和关系信息编写切入点。而 Eclipse Metadata Framework (EMF) 允许您基于类之间的关系(如复合、联合、 基数等)编写切入点。

AOP@Work: AOP和元数据:完美的匹配,第2部分-用元数据实现多维接口(7)

时间:2011-09-04 IBM Ramnivas Laddad

4. 使用抽象注释类型

如果在仔细分析要求后,确定使用注释是最好的选择,那么如何使用它们呢? 理想情况是,注释类型应当表示程序元素的抽象功能,而不是它们预期的消费。 这种考虑和实现避免了下面讨论的遗忘损失(loss of obliviousness),因为元 素只是提供有关它们自己的额外信息,没有意识到那些方面。例如,如果将 @ReadOperation 和 @WriteOperation 看作扩展的签名,那么类就可以保持对读 写锁定模式的实现的遗忘。

考虑清单 4 中已实现的基本方面,它遵守了前面讨论的使用方面继承的准则 。(如果需要关于 perthis() 方面的信息,请参阅 参考资料,这里的重点是定 义切入点。)

清单 4. ReadWriteLockSynchronizationAspect 的基本方面

public abstract aspect ReadWriteLockSynchronizationAspect perthis(readOperations() || writeOperations()) { public abstract pointcut readOperations(); public abstract pointcut writeOperations(); private ReadWriteLock lock = new ReentrantReadWriteLock(true); before() : readOperations() { lock.readLock().lock(); } after() : readOperations () { lock.readLock().unlock(); } before() : writeOperations() { lock.writeLock().lock(); } after() : writeOperations() { lock.writeLock().unlock(); } }

清单 5 显示了银行系统的 ReadWriteLockSynchronizationAspect 方面的、 元数据驱动的子方面。

清单 5. 并发管理子方面

public aspect BankingReadWriteLockSynchronizationAspect extends ReadWriteLockSynchronizationAspect { pointcut lockManagedExecution() : execution(* banking.Customer.* (..)) || execution(* banking.Account.*(..)); public pointcut readOperations() : execution(@ReadOperation * *.* (..)) && lockManagedExecution(); public pointcut writeOperations() : execution(@WriteOperation * *.*(..)) && lockManagedExecution(); }

注意,并不是简单地在所有 read 和 write 操作外面加上锁,因为不是所有 类都需要这种并发控制机制。也不应该让类指出它们的操作是否要用锁管理,因 为所选择的类将取决于应用程序对这些类的使用。(这种实现可能要对 Java 标 准库中新的集合类的线程不安全性负责。)在上面的例子中, lockManagedExecution() 切入点选择了需要用锁管理的连接点子集。

AOP@Work: AOP和元数据:完美的匹配,第2部分-用元数据实现多维接口(8)

时间:2011-09-04 IBM Ramnivas Laddad

抽象注释类型的能力

有了描述功能的抽象注释后,就可以用同样的注释实现其他关注点。例如,可 以使用 @ReadOperation 和 @WriteOperation 进行脏跟踪和脏缓冲(dirty tracking and caching)。甚至可以编写加强的方面来确保读操作的控制流中不 会调用对同一对象的写操作!

如果使用 @ReadLock 和 @WriteLock 注释类型“标记”需要用锁管理的方法 ,那么这个类会与锁管理功能紧密耦合。而且,将同一个注释用于其他目的很容 易出错,因为注释将要额外考虑特定的关注点,而不

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号