安全程序设计:什么是AOP

上传人:努力****83 文档编号:190529722 上传时间:2023-02-28 格式:PPT 页数:50 大小:125.50KB
返回 下载 相关 举报
安全程序设计:什么是AOP_第1页
第1页 / 共50页
安全程序设计:什么是AOP_第2页
第2页 / 共50页
安全程序设计:什么是AOP_第3页
第3页 / 共50页
点击查看更多>>
资源描述
什么是AOP?AOP起源AOP(Aspect-Oriented Programming)技术的诞技术的诞生并不算晚,早在生并不算晚,早在1990年开始,来自年开始,来自Xerox Palo Alto Research Center(即(即PARC)的研究人员)的研究人员就对面向对象思想的局限性进行了分析就对面向对象思想的局限性进行了分析他们研究出了一种新的编程思想,借助这一思想他们研究出了一种新的编程思想,借助这一思想或许可以通过减少代码重复模块从而帮助开发人或许可以通过减少代码重复模块从而帮助开发人员提高工作效率员提高工作效率随着研究的逐渐深入,随着研究的逐渐深入,AOP也逐渐发展成一套完也逐渐发展成一套完整的程序设计思想,各种应用整的程序设计思想,各种应用AOP的技术也应运的技术也应运而生而生AOPAOP技术在技术在Java平台下是最先得到应用的平台下是最先得到应用的就在就在PARC对于面向方面编程进行研究的同对于面向方面编程进行研究的同时,美国时,美国Northeastern University的博士的博士生生Cristina Lopes和其同事也开始了类似的和其同事也开始了类似的思考思考最 终,美 国 国 防 先 进 技 术 研 究 计 划 署最 终,美 国 国 防 先 进 技 术 研 究 计 划 署(Defense Advanced Research Projects Agency即即DARPA)注意到了这项工作,并)注意到了这项工作,并提供了科研经费,鼓励将二者的工作成果结提供了科研经费,鼓励将二者的工作成果结合起来合起来AOP他们通过定义一套他们通过定义一套Java语言的扩展系统,使语言的扩展系统,使开发者可以方便的进行面向切面的开发,这开发者可以方便的进行面向切面的开发,这套扩展系统被称为套扩展系统被称为AspectJ之后,之后,AspectJ在在2002年被转让给年被转让给Eclipse Foundation,从而成为在开源社区中,从而成为在开源社区中AOP技术的先锋,也是目前最为流行的技术的先锋,也是目前最为流行的AOP工具工具AOP问题提出:假设我们有一个业务组件假设我们有一个业务组件Component,里,里面有个业务方法,如下所示:面有个业务方法,如下所示:publicclass Component publicvoid business1()/业务方法业务方法1/doSomeThing1publicvoid business2()/业务方法业务方法2/doSomeThing2publicvoid business3()/业务方法业务方法3/doSomeThing3AOP 由于需求的变更,需要在每个方法执行前都要进行用户合由于需求的变更,需要在每个方法执行前都要进行用户合法性验证,只有合法的用户才能执行业务方法里面的内容法性验证,只有合法的用户才能执行业务方法里面的内容 因此,我们在三个方法中的第一行都需要加如一个用户合因此,我们在三个方法中的第一行都需要加如一个用户合法性检验的代码法性检验的代码 另外,我们还需要在运行方法中的实际业务逻辑前启动一另外,我们还需要在运行方法中的实际业务逻辑前启动一个事务,在业务逻辑代码执行完成后结束一个事务,需要个事务,在业务逻辑代码执行完成后结束一个事务,需要在方法中加入开始事务处理及结束事务处理的代码在方法中加入开始事务处理及结束事务处理的代码 最后,我们还需要在每一个方法结束后,把一些信息写入最后,我们还需要在每一个方法结束后,把一些信息写入日志系统中。因此需要在每一个方法的最后添加记录日志日志系统中。因此需要在每一个方法的最后添加记录日志的代码的代码AOP这时业务方法变成如下的形式:这时业务方法变成如下的形式:public void businessX()validateUser();beginTransaction();/doSomeThingendTransaction();writeLogInfo();AOP假如我们的系统有成千上万个这样业务方法,假如我们的系统有成千上万个这样业务方法,都需要执行用户权限验证、事务处理、日志都需要执行用户权限验证、事务处理、日志书写或审计等类似的工作,系统中就会充斥书写或审计等类似的工作,系统中就会充斥着非常多的重复性代码,造成代码书写及维着非常多的重复性代码,造成代码书写及维护极其不便护极其不便例如,由于需求的变更,我们要取消一部分业务方法例如,由于需求的变更,我们要取消一部分业务方法中的开启事务或结束事务处理的功能。此时,我们需中的开启事务或结束事务处理的功能。此时,我们需要手工逐一删除掉这些方法中事务处理语句要手工逐一删除掉这些方法中事务处理语句 AOP我们能不能不用在业务方法中添加那些重复我们能不能不用在业务方法中添加那些重复性的代码,而通过某种机制,让权限验证、性的代码,而通过某种机制,让权限验证、事务处理、日志记录等功能自动在这些方法事务处理、日志记录等功能自动在这些方法指定的位置自动运行呢?指定的位置自动运行呢?为了能更好地解决上面提到的问题,于是引为了能更好地解决上面提到的问题,于是引入了入了AOP(即面向切面)编程思想(即面向切面)编程思想AOPAOP(Aspect-Oriented Programming,面向方(切)面编程),可以说是面向方(切)面编程),可以说是OOP(Object-Oriented Programing,面向对,面向对象编程)的补充和完善象编程)的补充和完善OOP引入封装、继承和多态性等概念来建立引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一一种对象层次结构,用以模拟公共行为的一个集合个集合AOP什么是AOP?当我们需要为分散的对象引入公共行为的时候,当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,则显得无能为力。也就是说,OOP允许你定允许你定义从上到下的关系,但并不适合定义从左到右的义从上到下的关系,但并不适合定义从左到右的关系关系 例如例子中的日志功能。日志代码往往水平地散布在所有对象层次例如例子中的日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系中,而与它所散布到的对象的核心功能毫无关系 对于其他类型的代码,如安全性、异常处理和透明的持续性也对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此是如此这种散布在各处的无关的代码被称为横切这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在)代码,在OOP设计中,它导致设计中,它导致了大量代码的重复,而不利于各个模块的重用了大量代码的重复,而不利于各个模块的重用AOP而而AOP技术则恰恰相反,它利用一种称为技术则恰恰相反,它利用一种称为“横切横切”的技术,剖解开封装的对象内部,的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为个可重用模块,并将其名为“Aspect”,即,即方面方面所谓所谓“方面方面”,简单地说,就是将那些与业,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操降低模块间的耦合度,并有利于未来的可操作性和可维护性作性和可维护性AOPAOP代表的是一个横向的关系,如果说代表的是一个横向的关系,如果说“对对象象”是一个空心的圆柱体,其中封装的是对是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息以获得其内部的消息而剖开的切面,也就是所谓的而剖开的切面,也就是所谓的“方面方面”了。了。然后它又以巧夺天功的妙手将这些剖开的切然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹面复原,不留痕迹AOP使用使用“横切横切”技术,技术,AOP把软件系统分为两把软件系统分为两个部分:核心关注点和横切关注点个部分:核心关注点和横切关注点业务处理的主要流程是核心关注点,与之关业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点系不大的部分是横切关注点横切关注点的一个特点是,他们经常发生在横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似核心关注点的多处,而各处都基本相似比如权限认证、日志、事务处理比如权限认证、日志、事务处理AOPAOP的作用在于分离系统中的各种关注点,的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来将核心关注点和横切关注点分离开来正如正如Avanade公司的高级方案构架师公司的高级方案构架师Adam Magee所说,所说,AOP的核心思想就是的核心思想就是“将应将应用程序中的商业逻辑同对其提供支持的通用用程序中的商业逻辑同对其提供支持的通用服务进行分离。服务进行分离。”AOP实现实现AOP的技术,主要分为两大类:的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建二是采用静态织入的方式,引入特定的语法创建“方方面面”,从而使得编译器可以在编译期间织入有关,从而使得编译器可以在编译期间织入有关“方面方面”的代码的代码AOP 然而殊途同归,实现然而殊途同归,实现AOP的技术特性却是相同的,分别为:的技术特性却是相同的,分别为:1、join point(连接点):是程序执行中的一个精确执行点,例如类(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定时,并不需要去定义一个义一个join point 2、point cut(切入点):本质上是一个捕获连接点的结构。在(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个中,可以定义一个point cut,来捕获相关方法的调用,来捕获相关方法的调用 3、advice(通知):是(通知):是point cut的执行代码,是执行的执行代码,是执行“方面方面”的具的具体逻辑体逻辑 4、aspect(方面):(方面):point cut和和advice结合起来就是结合起来就是aspect,它类,它类似于似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。中定义的一个类,但它代表的更多是对象间横向的关系。5、introduce(引入):为对象引入附加的方法或属性,从而达到修(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的改对象结构的目的。有的AOP工具又将其称为工具又将其称为mixin 上述的技术特性组成了基本的上述的技术特性组成了基本的AOP技术,大多数技术,大多数AOP工具工具均实现了这些技术。它们也可以是研究均实现了这些技术。它们也可以是研究AOP技术的基本术技术的基本术语。语。AOP横切技术“横切横切”是是AOP的专有名词。它是一种蕴含的专有名词。它是一种蕴含强大力量的相对简单的设计和编程技术,尤强大力量的相对简单的设计和编程技术,尤其是用于建立松散耦合的、可扩展的企业系其是用于建立松散耦合的、可扩展的企业系统时统时横切技术可以使得横切技术可以使得AOP在一个给定的编程模在一个给定的编程模型中穿越既定的职责部分(比如权限验证、型中穿越既定的职责部分(比如权限验证、日志记录和性能优化等)的操作日志记录和性能优化等)的操作AOP如果不使用横切技术,软件开发是怎样的情形呢?如果不使用横切技术,软件开发是怎样的情形呢?在传统的程序中,由于横切行为的实现是分散的,在传统的程序中,由于横切行为的实现是分散的,开发人员很难对这些行为进行逻辑上的实现或更开发人员很难对这些行为进行逻辑上的实现或更改改例如,用于权限验证、日志记录的代码和主要用于其例如,用于权限验证、日志记录的代码和主要用于其它职责的代码缠绕在一起它职责的代码缠绕在一起根据所解决的问题的复杂程度和作用域的不同,根据所解决的问题的复杂程度和作用域的不同,所引起的混乱可大可小所引起的混乱可大可小更改一个应用程序的日志记录策略可能涉及数百次编更改一个应用程序的日志记录策略可能涉及数百次编辑辑即使可行,这也是个令人头疼的任务即使可行,这也是个令人头疼的任务AOP在在AOP中,我们将这些具有公共逻辑的,与中,我们将这些具有公共逻辑的,与其他模块的核心逻辑纠缠在一起的行为称为其他模块的核心逻辑纠缠在一起的行为称为“横切关注点(横切关注点(Crosscutting Concern)”,因为它跨越了给定编程模型中的典型职责界因为它跨越了给定编程模型中的典型职责界限限AOP横切关注点 一个关注点(一个关注点(concern)就是一个特定的目的,一块我们)就是一个特定的目的,一块我们感兴趣的区域,一段我们需要的逻辑行为感兴趣的区域,一段我们需要的逻辑行为 从技术的角度来说,一个典型的软件系统包含一些核心的从技术的角度来说,一个典型的软件系统包含一些核心的关注点和系统级的关注点关注点和系统级的关注点 举个例子来说,一个信用卡处理系统的核心关注点是借贷举个例子来说,一个信用卡处理系统的核心关注点是借贷/存入存入处理,而系统级的关注点则是日志、事务完整性、授权、安全处理,而系统级的关注点则是日志、事务完整性、授权、安全及性能问题等及性能问题等AOP许多关注点许多关注点即横切关注点(即横切关注点(crosscutting Concerns)会在多个模块中出现。如果会在多个模块中出现。如果使用现有的编程方法,横切关注点会横越多使用现有的编程方法,横切关注点会横越多个模块,结果是使系统难以设计、理解、实个模块,结果是使系统难以设计、理解、实现和演进现和演进AOP能够比上述方法更好地分离系统关注点,能够比上述方法更好地分离系统关注点,从而提供模块化的横切关注点从而提供模块化的横切关注点AOP例如一个复杂的系统,它由许多关注点组合例如一个复杂的系统,它由许多关注点组合实现实现如业务逻辑、性能,数据存储、日志和调度信息、授权、如业务逻辑、性能,数据存储、日志和调度信息、授权、安全、线程、错误检查等安全、线程、错误检查等还有开发过程中的关注点,如易懂、易维护、易追查、还有开发过程中的关注点,如易懂、易维护、易追查、易扩展等易扩展等下图演示了由不同模块实现的一批关注点组下图演示了由不同模块实现的一批关注点组成一个系统成一个系统AOP把模块作为一批关注点来实现AOP通过对系统需求和实现的识别,我们可以将模块通过对系统需求和实现的识别,我们可以将模块中的这些关注点分为:核心关注点和横切关注点中的这些关注点分为:核心关注点和横切关注点对于核心关注点而言,通常来说,实现这些关注对于核心关注点而言,通常来说,实现这些关注点的模块是相互独立的,他们分别完成了系统需点的模块是相互独立的,他们分别完成了系统需要的商业逻辑,这些逻辑与具体的业务需求有关要的商业逻辑,这些逻辑与具体的业务需求有关而对于日志、安全、持久化等关注点而言,他们而对于日志、安全、持久化等关注点而言,他们却是商业逻辑模块所共同需要的,这些逻辑分布却是商业逻辑模块所共同需要的,这些逻辑分布于核心关注点的各处于核心关注点的各处在在AOP中,诸如这些模块,都称为横切关注点。中,诸如这些模块,都称为横切关注点。应用应用AOP的横切技术,关键就是要实现对关注点的横切技术,关键就是要实现对关注点的识别的识别AOP如果将整个模块比喻为一个圆柱体,那么关如果将整个模块比喻为一个圆柱体,那么关注点识别过程可以用三棱镜法则来形容,穿注点识别过程可以用三棱镜法则来形容,穿越三棱镜的光束(指需求),照射到圆柱体越三棱镜的光束(指需求),照射到圆柱体各处,获得不同颜色的光束,最后识别出不各处,获得不同颜色的光束,最后识别出不同的关注点。如图所示同的关注点。如图所示AOP关注点识别:三棱镜法则AOP上图识别出来的关注点中,上图识别出来的关注点中,Business Logic属于核心关注点,它会调用到属于核心关注点,它会调用到Security,Logging,Persistence等横切等横切关注点关注点AOP public class BusinessLogic public void SomeOperation()/验证安全性;Securtity关注点;/执行前记录日志;Logging关注点;DoSomething();/保存逻辑运算后的数据;Persistence关注点;/执行结束记录日志;Logging关注点;AOP AOP的目的,就是要将诸如的目的,就是要将诸如Securtity、Logging之类的横之类的横切关注点从切关注点从BusinessLogic类中分离出来类中分离出来 利用利用AOP技术,可以对相关的横切关注点封装,形成单独技术,可以对相关的横切关注点封装,形成单独的的“aspect”。这就保证了横切关注点的复用。这就保证了横切关注点的复用 由于由于BusinessLogic类中不再包含横切关注点的逻辑代码,类中不再包含横切关注点的逻辑代码,为达到调用横切关注点的目的,可以利用横切技术,截取为达到调用横切关注点的目的,可以利用横切技术,截取BusinessLogic类中相关方法的消息,例如类中相关方法的消息,例如SomeOperation()方法,然后将这些方法,然后将这些“aspect”织入到该织入到该方法中方法中AOP将横切关注点织入到核心关注点中AOP通过利用通过利用AOP技术,改变了整个系统的设计技术,改变了整个系统的设计方式方式在分析系统需求之初,利用在分析系统需求之初,利用AOP的思想,分的思想,分离出核心关注点和横切关注点离出核心关注点和横切关注点在实现了诸如日志、事务管理、权限控制等在实现了诸如日志、事务管理、权限控制等横切关注点的通用逻辑后,开发人员就可以横切关注点的通用逻辑后,开发人员就可以专注于核心关注点,将精力投入到解决企业专注于核心关注点,将精力投入到解决企业的商业逻辑上来的商业逻辑上来AOP同时,这些封装好了的横切关注点提供的功同时,这些封装好了的横切关注点提供的功能,可以最大限度地复用于商业逻辑的各个能,可以最大限度地复用于商业逻辑的各个部分,既不需要开发人员作特殊的编码,也部分,既不需要开发人员作特殊的编码,也不会因为修改横切关注点的功能而影响具体不会因为修改横切关注点的功能而影响具体的业务功能的业务功能为了建立松散耦合的、可扩展的企业系统,为了建立松散耦合的、可扩展的企业系统,AOP应用到的横切技术,通常分为两种类型:应用到的横切技术,通常分为两种类型:动态横切和静态横切动态横切和静态横切AOP动态横切动态横切是通过切入点和连接点在一个方面动态横切是通过切入点和连接点在一个方面中创建行为的过程,连接点可以在执行时横中创建行为的过程,连接点可以在执行时横向地应用于现有对象向地应用于现有对象动态横切通常用于帮助向对象层次中的各种动态横切通常用于帮助向对象层次中的各种方法添加日志记录或身份认证。在很多应用方法添加日志记录或身份认证。在很多应用场景中,动态横切技术基本上代表了场景中,动态横切技术基本上代表了AOPAOP动态横切技术的核心主要包括动态横切技术的核心主要包括join point(连接点),(连接点),point cut(切入点),(切入点),advice(通知)和(通知)和aspect(方面)。在前(方面)。在前面已经概要地介绍了这些术语分别代表的含面已经概要地介绍了这些术语分别代表的含义义接下来,将以一个具体的实例来进一步阐述接下来,将以一个具体的实例来进一步阐述它们在它们在AOP动态横切中实现的意义动态横切中实现的意义AOP考虑一个电子商务系统,需要对订单进行添考虑一个电子商务系统,需要对订单进行添加、删除等管理操作加、删除等管理操作毫无疑问,在实际的应用场景中,这些行为毫无疑问,在实际的应用场景中,这些行为应与权限管理结合,只有获得授权的用户方应与权限管理结合,只有获得授权的用户方能够实施这些行为能够实施这些行为采用传统的设计方法,其伪代码如下:采用传统的设计方法,其伪代码如下:AOP public class OrderManager private ArrayList m_Orders;public OrderManager()m_Orders=new ArrayList();public void AddOrder(Order order)if(permissions.Verify(Permission.ADMIN)m_Orders.Add(order);public void RemoveOrder(Order order)if(permissions.Verify(Permission.ADMIN)m_Orders.Remove(order);AOP 同样的,在该电子商务系统中,还需要对商品进行管理,它采用了同样的授权机制:public class ProductManager private ArrayList m_Products;public ProductManager()m_Products=new ArrayList();public void AddProduct(Product product)if(permissions.Verify(Permission.ADMIN)m_Products.Add(product);public void RemoveProduct(Product product)if(permissions.Verify(Permission.ADMIN)m_Products.Remove(product);AOP如此以来,在整个电子商务系统中,核心业务包如此以来,在整个电子商务系统中,核心业务包括订单管理和商品管理,它们都需要相同的权限括订单管理和商品管理,它们都需要相同的权限管理,如图所示:管理,如图所示:AOP毫无疑问,利用毫无疑问,利用AOP技术,我们可以分离出系统技术,我们可以分离出系统的核心关注点和横切关注点,从横向的角度,截的核心关注点和横切关注点,从横向的角度,截取业务管理行为的内部消息,以达到织入权限管取业务管理行为的内部消息,以达到织入权限管理逻辑的目的理逻辑的目的当执行当执行AddOrder()等方法时,系统将验证用户的等方法时,系统将验证用户的权限,调用横切关注点逻辑,因此该方法即为权限,调用横切关注点逻辑,因此该方法即为AOP的的join point对于电子商务系统而言,每个需要权限验证的方对于电子商务系统而言,每个需要权限验证的方法都是一个单独的法都是一个单独的join pointAOP由于权限验证将在每个方法执行前执行,所由于权限验证将在每个方法执行前执行,所以对于这一系列以对于这一系列join point,只需要定义一,只需要定义一个个point cut当系统执行到当系统执行到join point处时,将根据定义处时,将根据定义去查找对应的去查找对应的point cut,然后执行这个横切,然后执行这个横切关注点需要实现的逻辑,即关注点需要实现的逻辑,即advice。而。而point cut和和advice,就组合成了一个权限,就组合成了一个权限管理管理aspectAOPAOP由于由于aspect是一个封装的对象,我们可以定是一个封装的对象,我们可以定义这样一个义这样一个aspect:然后在这个然后在这个aspect中定义中定义point cut,在,在point cut中,定义了需要截取上下文消息的方法,例如:中,定义了需要截取上下文消息的方法,例如:private static aspect AuthorizationAspectprivate pointcut authorizationExecution():execution(public void OrderManager.AddOrder(Order)|execution(public void OrderManager.DeleteOrder(Order)|execution(public void ProductManager.AddProduct(Product)|execution(public void ProductManager.DeleteProduct(Product);AOP由于权限验证是在订单管理方法执行之前完由于权限验证是在订单管理方法执行之前完成,因此在成,因此在before advice中,定义权限检中,定义权限检查查before():authorizationExecution()if!(permissions.Verify(Permission.ADMIN)throw new UnauthorizedException();AOP通过定义了这样一个完整的通过定义了这样一个完整的aspect,当系统调用,当系统调用OrderManager或或ProductManager的相关方法时,的相关方法时,就触发了就触发了point cut,然后调用相应的,然后调用相应的advice逻辑逻辑如此以来,如此以来,OrderManager和和ProductManager模模块就与权限管理模块完全解除了依赖关系,同时也块就与权限管理模块完全解除了依赖关系,同时也消除了传统设计中不可避免的权限判断的重复代码。消除了传统设计中不可避免的权限判断的重复代码。这对于建立一个松散耦合、可扩展的系统软件是非这对于建立一个松散耦合、可扩展的系统软件是非常有利的常有利的AOPAOP技术的优势 AOP技术的优势是显而易见的。在面向对象的世界里,人们提技术的优势是显而易见的。在面向对象的世界里,人们提出了各种方法和设计原则来保障系统的可复用性与可扩展性,出了各种方法和设计原则来保障系统的可复用性与可扩展性,以期建立一个松散耦合、便于扩展的软件系统以期建立一个松散耦合、便于扩展的软件系统 设计模式通过最大程度的利用面向对象的特性,诸如利用继承、设计模式通过最大程度的利用面向对象的特性,诸如利用继承、多态,对责任进行分离、对依赖进行倒置,面向抽象,面向接多态,对责任进行分离、对依赖进行倒置,面向抽象,面向接口,最终设计出灵活、可扩展、可重用的类库、组件,乃至于口,最终设计出灵活、可扩展、可重用的类库、组件,乃至于整个系统的架构整个系统的架构 在设计的过程中,通过各种模式体现对象的行为、暴露的接口、在设计的过程中,通过各种模式体现对象的行为、暴露的接口、对象间关系、以及对象分别在不同层次中表现出来的形态。然对象间关系、以及对象分别在不同层次中表现出来的形态。然而鉴于对象封装的特殊性,而鉴于对象封装的特殊性,“设计模式设计模式”的触角始终在接口与的触角始终在接口与抽象中大做文章,而对于对象内部则无能为力抽象中大做文章,而对于对象内部则无能为力AOP通过通过“横切横切”技术,技术,AOP技术就能深入到对象内技术就能深入到对象内部翻云覆雨,截取方法之间传递的消息为我们所部翻云覆雨,截取方法之间传递的消息为我们所用用由于将核心关注点与横切关注点完全隔离,使得由于将核心关注点与横切关注点完全隔离,使得我们能够独立的对我们能够独立的对“方面方面”编程编程它允许开发者动态地修改静态的它允许开发者动态地修改静态的OO模型,构造出模型,构造出一个能够不断增长以满足新增需求的系统,就象一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自现实世界中的对象会在其生命周期中不断改变自身,应用程序也可以在发展中拥有新的功能身,应用程序也可以在发展中拥有新的功能AOPAOP技术优势总结在定义应用程序对某种服务(例如日志)的所有在定义应用程序对某种服务(例如日志)的所有需求的时候。通过识别关注点,使得该服务能够需求的时候。通过识别关注点,使得该服务能够被更好的定义,更好的被编写代码,并获得更多被更好的定义,更好的被编写代码,并获得更多的功能的功能 这种方式还能够处理在代码涉及到多个功能的时候所出现的问题,这种方式还能够处理在代码涉及到多个功能的时候所出现的问题,例如改变某一个功能可能会影响到其它的功能,在例如改变某一个功能可能会影响到其它的功能,在AOP中把这样的中把这样的麻烦称之为麻烦称之为“纠结(纠结(tangling)”。利用利用AOP技术对离散的方面进行的分析将有助于技术对离散的方面进行的分析将有助于为开发团队指定一位精于该项工作的专家。负责为开发团队指定一位精于该项工作的专家。负责这项工作的最佳人选将可以有效利用自己的相关这项工作的最佳人选将可以有效利用自己的相关技能和经验技能和经验AOP 持久性。标准的面向对象的项目开发中,不同的开发人持久性。标准的面向对象的项目开发中,不同的开发人员通常会为某项服务编写相同的代码,例如日志记录。员通常会为某项服务编写相同的代码,例如日志记录。随后他们会在自己的实施中分别对日志进行处理以满足随后他们会在自己的实施中分别对日志进行处理以满足不同单个对象的需求不同单个对象的需求 而通过创建一段单独的代码片段,而通过创建一段单独的代码片段,AOP提供了解决这一提供了解决这一问题的持久简单的方案,这一方案强调了未来功能的重问题的持久简单的方案,这一方案强调了未来功能的重用性和易维护性:不需要在整个应用程序中一遍遍重新用性和易维护性:不需要在整个应用程序中一遍遍重新编写日志代码,编写日志代码,AOP使得仅仅编写日志方面(使得仅仅编写日志方面(logging aspect)成为可能,并且可以在这之上为整个应用程序)成为可能,并且可以在这之上为整个应用程序提供新的功能提供新的功能AOP总而言之,总而言之,AOP技术的优势使得需要编写的技术的优势使得需要编写的代码量大大缩减,节省了时间,控制了开发代码量大大缩减,节省了时间,控制了开发成本。同时也使得开发人员可以集中关注于成本。同时也使得开发人员可以集中关注于系统的核心商业逻辑系统的核心商业逻辑此外,它更利于创建松散耦合、可复用与可此外,它更利于创建松散耦合、可复用与可扩展的大型软件系统扩展的大型软件系统
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!