AOP@Work: AOP和元数据:完美的匹配,第1部分

元数据增强的AOP的概念和结构

简介:在这篇由两个部分组成的系列文章的第 1 部分中,作者 Ramnivas Laddad 将对新的元数据功能进行概念性介绍,并展示在加入了元数据注释后, AOP 可以在什么地方获得最大的好处。然后他将分五步完成一个设计改造,从一 个无元数据的 AOP 实现开始,最终得到一个结合了 Participant 设计模式与注 释者-供应者(annotator-supplier)方面的 AOP。

新的 Java 元数据功能(facility)是 J2SE 5.0 的一部分,它可能是当前 Java 语言中最重要的增强。通过提供为程序元素附加额外数据的标准方法,元数 据功能具有简化和改进许多应用程序开发领域的潜在能力,其中包括配置管理、 框架实现和代码生成。这个功能还对面向方面的编程(即 AOP)具有特殊意义的 影响。

元数据与 AOP 的结合带来了一些重要的问题,其中包括:

元数据功能对 AOP 有什么影响?

元数据增强的 AOP 是可选的还是必需的?

在哪儿可以找到在 AOP 中有效地使用元数据的准则?

这种结合对 AOP 的采用有什么影响?

在这个由两部分组成的系列文章中,我将回答这些问题,这是新的 AOP@Work 系列的第二篇文章。在这篇文章的前半部分中,我首先将对元数据和 Java 元数 据功能的概念进行介绍,还将说明提供元数据和消费它的区别,并提供一些适合 使用元数据注释的常见编程场景。下一步,我将快速地回顾 AOP 的连接点模型的 基本内容,并说明它从元数据增强中可以获得哪些好处。最后是一个实际的例子 ,将使用元数据增强的 AOP 分五步完善一个设计。在第 2 部分,我将展示一种 将元数据视为多维关注点空间中的签名的一种创新方法、讨论元数据对 AOP 采用 的影响,最后提供一些有效结合 AOP 与元数据的指导。

在本文中,我将采用三种重要的 AOP 实现的例子,将这些概念应用到实例中 ,这三种实现是 AspectJ、AspectWerkz 和 JBoss APO。请参阅参考资料,以获 得关于 Java 元数据功能和面向方面编程的一组介绍文章的清单。

元数据的概念

元数据 是关于数据的数据。在编程语言上下文中,元数据是添加到程序元素 如方法、字段、类和包上的额外信息。元数据是用称为注释 的程序元素表示的。 与元数据相关的语义范围很广,从纯粹的文档,到执行行为的修改。例如,可以 用元数据描述类的作者和版权所有者,这时它对程序的执行没有影响,也可以用 它描述方法属性,比如事务特性,这很可能改变方法的行为,正如我在本文后面 所描述的。

虽然在 Java 语言中有众多的元数据工具(最著名的是 XDoclet),但是元数 据注释直到发行 Java 5.0 时才被添加到 Java 语言的核心中。 Java 元数据功 能(JSR 175,请参阅参考资料)包括一种机制,该机制允许在 Java 代码中添加 自定义注释,并允许通过反射(reflection),以编程方式访问元数据注释。

理解和使用元数据的关键是供应和消费的概念。元数据的供应者 是将注释实 例与程序元素关联的工具,消费者 是读取、解释以及对注释实例进行操作的工具 。在下一节中,我将更详细地讨论这些概念。

时间: 2025-01-30 14:06:04

AOP@Work: AOP和元数据:完美的匹配,第1部分的相关文章

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

简介:在这篇由两部分组成的关于组合使用元数据和 AOP 的系列文章的第二 部分中,作者及 AOP 实践者 Ramnivas Laddad 将推荐一种把元数据视为多维关 注点空间中的签名的全新方法.他还将介绍有效组合使用元数据与 AOP 的一组准 则,并讨论元数据注释将如何影响面向方面的编程的应用. 在本文的第一部分 中,我介绍了新的 Java 元数据功能,并说明了如何以及 在什么地方可以用元数据注释最有效地增强 AOP 的连接点模型.我还概括三种最 重要 AOP 系统对元数据的已有支持,这三种系

AOP@Work: AOP工具比较,第1部分-语言机制

简介:AOP 技术的时代已经来临,但是怎样才能为项目选择正确的工具呢?在 新推出的 AOP@Work 系列的第一篇文章中,面向方面(aspect-oriented)的编程 专家 Mik Kersten 将比较 4 个领先的 AOP 工具(AspectJ.AspectWerkz. JBoss AOP 和 Spring AOP),帮助大家判断应该选择哪一个工具.本文由两个部 分组成,在文中,作者将重点介绍这些工具的语言机制和不同技术的优劣.他分 别用 4 种工具编写同一个示例,让读者感觉到它们之间的

AOP@Work: AOP工具比较,第2部分-开发环境

简介:在这个由两部分构成的 AOP 工具比较的第 2 部分中,面向方面专家 Mik Kersten 将把重点放在工具与开发环境的集成以及构建过程上,包括对 AOP 工具 IDE 特性的逐点比较.为了帮助制定最终决策,在进行总结的时候,作者将 介绍这些快速发展的工具近期的发展情况,并提供每种工具优缺点的总结.注意 ,本文将解释最近宣布的 AspectJ 和 AspectWerkz 项目合并的意义. 在这个由两部分构成的 AOP 工具比较的第 1 部分 中,介绍了 4 种领先的 AOP 工具(Asp

在 ASP.NET 中用匿名委托简单模拟 AOP 做异常和日志处理

asp.net 这两天写 ASP.NET 写晕了,老想偷点懒.由于在后台的代码里几乎每个方法里都要 try..catch 这么来一遍,感觉很烦琐.又联想到 AOP, 但 AOP 的做法相对比较复杂,做法也很多.比如用 Dynamic Proxy, Attribute, 或者 Emit 等.我忽然联想到了 C# 2.0 的新特性匿名委托,觉得这个虽然丑一点...不过其实也可以比较轻量级的简单模拟 AOP 的效果: // asp.net 里面强制做一个页面基类的要求是不过分的...public pa

Spring 2.X中AOP的使用浅析

和Spring1.X相比,Spring2.X使用AspectJ的语法来声明AOP,这使得它更"标准",更灵活了.还是那句话,如果你不了解AspectJ并且打算使用Spring2.X的AspectJ式AOP,那就学学AspectJ吧,这方面的书还是很多了. Spring2.X下的切面有两种实现方式,一种是以Java文件定义切面(其只是普通的Java类),然后在配置文件中声明定义的切面:另一种是在Java类中引入和AOP相关的元数据(注释). 先介绍第一种配置方式.需要指出的是,Sprin

面向切面编程(AOP)的理解

  在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录.事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码.当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心业务逻辑处理才那么几行,如图6-4所示.方法复方法,类复类,就这样子带着无可奈何遗憾地度过了多少个春秋.这倒也罢,倘若到了项目的尾声,突然决定在权限控制上需要进行大的变动时,成千上万个方法又得一一"登门拜访",痛苦"雪上加霜". 如果能把图6-4中众多方法中的所有共

Java实现AOP面向切面编程的实例教程_java

介绍 众所周知,AOP(面向切面编程)是Spring框架的特色功能之一.通过设置横切关注点(cross cutting concerns),AOP提供了极高的扩展性.那AOP在Spring中是怎样运作的呢?当你只能使用core java,却需要AOP技术时,这个问题的解答变得极为关键.不仅如此,在高级技术岗位的面试中,此类问题也常作为考题出现.这不,我的朋友最近参加了一个面试,就被问到了这样一个棘手的问题--如何在不使用Spring及相关库,只用core Java的条件下实现AOP.因此,我将在

实例讲解Java的Spring框架中的AOP实现_java

简介面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足. 除了类(classes)以外,AOP提供了 切面.切面对关注点进行模块化,例如横切多个类型和对象的事务管理. (这些关注点术语通常称作 横切(crosscutting) 关注点.) Spring的一个关键的组件就是 AOP框架. 尽管如此,Spring IoC容器并不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得Spring IoC容器更加完善.

依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)

依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦.所谓横切关注点,即影响应用多处的功能,这些功能各个应用模块都需要,但又不是其主要关注点,常见的横切关注点有日志.事务和安全等. 将横切关注点抽离形成独立的类,即形成了切面.切面主要由切点和通知构成,通知定义了切面是什么,以及何时执行何种操作:切点定义了在何处执行通知定义的操作. http://ju.outofmemory.cn/entry/216839 引子: AOP(面向方面编程:Asp