为了完成上述并发访问同一资源的功能,须要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就当即解锁unLocked,再供其它访问类访问。
应用范围
很明显,
AOP很是适合开发J2EE容器服务器,JBoss 4.0正是使用AOP框架进行开发。
具体功能以下:
Authentication 权限
Lazy loading 延时加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization性能优化
Persistence 持久化
Synchronization 同步
【AOP有必要吗?】
固然,上述应用范例在没有使用AOP状况下,也获得了解决,例如JBoss 3.XXX也提供了上述应用功能,而且没有使用AOP。
可是,使用AOP可让咱们从一个更高的抽象概念来理解软件系统,AOP也许提供一种有价值的工具。能够这么说:由于使用AOP结构,JBoss 4.0的源码要比JBoss 3.X容易理解多了,这对于一个大型复杂系统来讲是很是重要的。
从另一个方面说,好像不是全部的人都须要关心AOP,它多是一种架构设计的选择,若是选择J2EE系统,AOP关注的上述通用方面都已经被J2EE容器实现了,J2EE应用系统开发者可能须要更多地关注行业应用方面aspect。
传统的程序一般表现出一些不能天然地适合单一的
程序模块或者是几个紧密相关的程序模块的行为,AOP 将这种行为称为横切,它们跨越了给定编程模型中的典型职责界限。横切行为的实现都是分散的,
软件设计师会发现这种行为难以用正常的逻辑来思考、实现和更改。最多见的一些横切行为以下面这些:
日志记录,跟踪,优化和监控
事务的处理
持久化
性能的优化
系通通一的认证、权限管理等
应用系统的异常捕捉及处理
针对具体行业应用的横切行为
前面几种横切行为都已经获得了密切的关注,也出现了各类有价值的应用,但也许从此几年,AOP 对针对具体行业应用的贡献会成为使人关注的焦点。
实现项目
AOP是一个概念,并无设定具体语言的实现,它能克服那些只有单继承特性语言的缺点(如Java),AOP具体实现有如下几个项目:
AspectJ (TM): 建立于Xerox PARC. 有近十年历史,成熟
缺点:过于复杂;破坏封装;须要专门的Java
编译器。
动态AOP:使用JDK的动态代理API或
字节码Bytecode处理技术。
基于动态代理API的具体项目有:
JBoss 4.0 JBoss 4.0服务器
基于字节码的项目有:
aspectwerkz ,spring
做用
面向过程编程离咱们已经有些遥远,
面向对象编程正主宰着软件世界。当每一个新的
软件设计师都被要求掌握如何将需求功能转化成一个个类,而且定义它们的
数据成员、行为,以及它们之间复杂的关系的时候,面向切面编程(Aspect-Oriented Programming,AOP)为咱们带来了新的想法、新的思想、新的模式。
若是说面向对象编程是关注将需求功能划分为不一样的而且相对独立,封装良好的类,并让它们有着属于本身的行为,依靠继承和
多态等来定义彼此的关系的话;那么面向切面编程则是但愿可以将通用需求功能从不相关的类当中分离出来,可以使得不少类共享一个行为,一旦发生变化,没必要修改不少类,而只须要修改这个行为便可。
面向切面编程是一个使人兴奋不已的新模式。就开发软件系统而言,它的影响力必将会和有着数十年应用历史的
面向对象编程同样巨大。
面向切面编程和面向对象编程不但不是互相竞争的技术并且彼此仍是很好的互补。面向对象编程主要用于为同一对象层次的公用
行为建模。它的弱点是将公共行为应用于多个无关对象模型之间。而这偏偏是面向切面编程适合的地方。有了 AOP,咱们能够定义交叉的关系,并将这些关系应用于跨模块的、彼此不一样的对象模型。AOP 同时还可让咱们层次化功能性而不是嵌入功能性,从而使得代码有更好的可读性和易于维护。它会和面向对象编程合做得很好。
实现
AOP 是一个概念,一个规范,自己并无设定具体语言的实现,这实际上提供了很是广阔的发展的空间。AspectJ是AOP的一个很悠久的实现,它可以和 Java 配合起来使用。
介绍 AspectJ 的使用和编码不是本文的目的,你能够在 Google 上找到不少有关它的材料。
这里只是重温 AspectJ 中几个必需要了解的概念:
Aspect: Aspect 声明相似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
Joint point:表示在程序中明肯定义的点,典型的包括方法调用,对类成员的访问以及
异常处理程序块的执行等等,它自身还能够嵌套其它 joint point。
Pointcut:表示一组 joint point,这些 joint point 或是经过逻辑关系组合起来,或是经过通配、
正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
Advice:Advice 定义了在 pointcut 里面定义的程序点具体要作的操做,它经过 before、after 和 around 来区别是在每一个 joint point 以前、以后仍是代替执行的代码。
下面要讨论的这些问题,也许正是接触了 AOP 以后所困惑的。
AOP 帮助咱们解决了新的问题没有?
AOP 并无帮助咱们解决任何新的问题,它只是提供了一种更好的办法,可以用更少的工做量来解决现有的一些问题,而且使得系统更加健壮,可维护性更好。同时,它让咱们在进行系统架构和
模块设计的时候多了新的选择和新的思路。
工业化应用
这个问题很难回答,其实最好的答案就是尝试,用成功的项目或是产品来回答。Jboss 4.0 就是彻底采用 AOP 的思想来设计的 EJB 容器,它已经经过了 J2EE 的认证,而且在工业化应用中证实是一个优秀的产品。相信在不远的未来,会出现更多采用 AOP 思想设计的产品和行业应用。
小结
AOP 正向咱们走来,咱们须要关注的是怎么样使得它可以为咱们的软件系统的设计和实现带来帮助。本文旨在给你们一点启发,可以在更多的领域更深刻的应用 AOP 的思想。