专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » aop是什么意思:AOP是什么? »正文

aop是什么意思:AOP是什么?

来源: 发布时间:星期五, 2008年12月19日 浏览:2次 评论:0
为什么要区分J2EE容器和J2EE应用系统?   我们知道J2EE应用系统只有部署在J2EE容器中才能运行那么为什么划分为J2EE容器和J2EE应用系统? 通过对J2EE容器运行机制分析(见我电子教材“EJB实用原理”)我们可以发现:实际上J2EE容器分离了般应用系统些通用功能例如事务机制、安全机制以及对象池或线程池等性能优化机制   这些功能机制是每个应用系统几乎都需要因此可以从具体应用系统中分离出来形成个通用框架平台而且这些功能机制设计开发有定难度同时运行稳定性和快速性都非常重要必须经过长时间调试和运行经验积累而成因此形成了专门J2EE容器服务器产品如Tomcat JBoss、Websphere、WebLogic等   从J2EE系统划分为J2EE容器和J2EE应用系统两个方面我们已经看到种分散关注思路(separation of concerns) 分散关注   将通用需求功能从不相关类的中分离出来;同时能够使得很多类共享个行为旦行为发生变化不必修改很多类只要修改这个行为就可以    AOP就是这种实现分散关注编程思路方法它将“关注”封装在“方面”中 AOP是什么?   AOP是OOP延续是Aspect Oriented Programming缩写意思是面向方面编程AOP实际是GoF设计模式延续设计模式孜孜不倦追求者和被者的间解耦AOP可以说也是这种目标种实现   举例:假设有在个应用系统中个共享数据必须被并发同时访问首先将这个数据封装在数据对象中称为Data Class同时将有多个访问类专门用于在同时刻访问这同个数据对象   为了完成上述并发访问同资源功能需要引入锁Lock概念也就是说某个时刻当有个访问类访问这个数据对象时这个数据对象必须上锁Locked用完后就立即解锁unLocked再供其它访问类访问   使用传统编程习惯我们会创建个抽象类所有访问类继承这个抽象父类如下: abstract Worker{   abstract void locked;   abstract void accessDataObject;   abstract void unlocked; }   缺点: accessDataObject思路方法需要有“锁”状态的类相关代码 Java只提供了单继承因此具体访问类只能继承这个父类如果具体访问类还要继承其它父类比如另外个如Worker父类将无法方便实现 重用被打折扣具体访问类也包含“锁”状态的类相关代码只能被重用在相关有“锁”场合重用范围很窄 仔细研究这个应用“锁”它其实有下列特性: “锁”功能不是具体访问类首要或主要功能访问类主要功能是访问数据对象例如读取数据或更改动作 “锁”行为其实是和具体访问类主要功能可以独立、区分开来 “锁”功能其实是这个系统个纵向切面涉及许多类、许多类思路方法如下图: 因此个新结构应该是关注系统纵向切面例如这个应用“锁”功能这个新结构就是aspect(方面)   在这个应用中“锁”方面(aspect)应该有以下职责:   提供些必备功能对被访问对象实现加锁或解锁功能以保证所有在修改数据对象操作的前能够lock加锁在它使用完成后unlock解锁 AOP应用范围   很明显AOP非常适合开发J2EE容器服务器目前JBoss 4.0正是使用AOP框架进行开发   具体功能如下: Authentication 权限 Caching 缓存Cache Context passing 内容传递 Error handling 处理 Lazy loading 懒加载 Debugging  调试 logging, tracing, profiling and monitoring 记录跟踪 优化 校准 Performance optimization 性能优化 Persistence  持久化 Resource pooling 资源池 Synchronization 同步 Transactions 事务 AOP有必要吗?   当然上述应用范例在没有使用AOP情况下也得到了解决例如JBoss 3.XXX也提供了上述应用功能但是没有使用AOP   但是使用AOP可以让我们从个更高抽象概念来理解软件Software系统AOP也许提供种有价值工具可以这么说:使用AOP结构现在JBoss 4.0源码要比JBoss 3.X容易理解多了这对于个大型复杂系统来说是非常重要   从另外个方面说好像不是所有人都需要关心AOP它可能是种架构设计选择如果选择J2EE系统AOP关注上述通用方面都已经被J2EE容器实现了J2EE应用系统开发者可能需要更多地关注行业应用方面aspect AOP具体实现   AOP是个概念并没有设定具体语言实现它能克服那些只有单继承特性语言缺点(如Java)目前AOP具体实现有以下几个项目:   AspectJ (TM): 创建于Xerox PARC. 有近十年历史成熟   缺点:过于复杂;破坏封装;需要专门Java编译器   动态AOP:使用JDK动态代理API或字节码Bytecode处理技术   基于动态代理API具体项目有: JBoss 4.0 JBoss 4.0服务器 nanning 这是以中国南宁命名个项目搞不清楚为什么和中国相关?是中国人发起?   基于字节码项目有: aspectwerkz  spring 在以后其它文章中我将继续对AOP概念进行分析和大家起学习进步

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: