网站大量收购独家精品文档,联系QQ:2885784924

aop的实现原理.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
aop的实现原理

aop 的实现原理 面向方面编程(Aspect Oriented Programming ,简称AOP )是一种声明式编程(Declarative Programming )。声 明式编程是和命令式编程(Imperative Programming )相对的概念。我们平时使用的编程语言,比如C++、Java、Ruby、 Python 等,都属命令式编程。命令式编程的意思是,程序员需要一步步写清楚程序需要如何做什么(How to do What )。 声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么(Where to do What )。 比起命令式编程来,声明式编程是在一个更高的层次上编程。声明式编程语言是更高级的语言。声明式编程通常处理一些总 结性、总览性的工作,不适合做顺序相关的细节相关的底层工作。 如果说命令式编程是拼杀在第一线的基层工作人员,声明式编程就是总设计师、规则制定者。声明式编程语言的概念, 和领域专用语言(Domain Specific Language ,简称DSL )的概念有相通之处。DSL 主要是指一些对应专门领域的高层编 程语言,和通用编程语言的概念相对。DSL 对应的专门领域(Domain )一般比较狭窄,或者对应于某个行业,或者对应于 某一类具体应用程序,比如数据库等。 最常见的 DSL 就是关系数据库的结构化数据查询语言 SQL。同时,SQL 也是一门声明式语言。SQL 只需要告诉数据库, 处理符合一定条件的数据,而不需要自己一步步判断每一条数据是否符合条件。SQL 的形式一般是 select … where … , update … where … ,delete … where …。当然,这样一来,很多基层工作,SQL 做不了。因此,大部分数据库都提供了另 外的命令式编程语言,用来编写存储过程等,以便处理一些更加细节的工作。 常见的 DSL 还有规则引擎(Rule Engine )语言、工作流(Workflow )语言等。规则引擎和工作流同时带有命令式编 程和声明式编程的特点。规则引擎允许用户按照优先级定义一系列条件组合,并定义对满足条件的数据的处理过程。工作流 也大致类似。工作流把最基本的条件判断和循环语句的常见组合,定义为更加高级复杂的常用程序流程逻辑块。用户可以用 这些高级流程块组合更加复杂的流程块,从而定义更加复杂的流程跳转条件。用户也可以定义当程序运行上下文满足一定条 件的时候,应该做什么样的处理工作。规则引擎和工作流的语言形式有可能是 XML 格式,也有可能是 Ruby、Python、 JavaScript 等脚本格式。我个人比较倾向于脚本格式,因为 XML 适合表达结构化数据,而不擅长表达逻辑流程。当然,XML 格式的好处也是显而易见的。解析器可以很容易分析 XML 文件的结构,XML 定义的条件或者程序流程都可以很方便地作为 数据来处理。 介绍了声明式编程和 DSL 之后,我们来看本章题目表达的内容——AOP。AOP 是声明式编程,AOP 语言也可以看作 是 DSL。AOP 语言对应的专门领域(Domain )就是程序结构的方方面面(Aspect ),比如程序的类、方法、成员变量等结 构,以及针对这些程序结构的通用工作处理,比如日志管理、权限管理、事务管理等。 AOP 处理的工作内容一般都是这样的一些总结性工作: “我想让所有的数据库类都自动进行数据库映射”、 “我想打 印出所有业务类的工作流程日志”、 “我想给所有关键业务方法都加上事务管理功能”、 “我想给所有敏感数据处理方法都 加上安全管理授权机制”等等。 下面我们介绍 AOP 的实现原理和使用方法。 AOP 实现原理 AOP 的实现原理可以看作是 Proxy/Decorator 设计模式的泛化。我们先来看 Proxy 模式的简单例子。 1 / 5 1. Proxy { 2. innerObject; // 真正的对象 3. f1() { 4. // 做一些额外的事情 5. 6. innerObject.f1(); // 调用真正的对象的对应方法 7. 8. // 做一些额外的事情 9. }

文档评论(0)

ayangjiayu4 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档