AOP(面切面编程).pptVIP

  • 3
  • 0
  • 约3.68千字
  • 约 11页
  • 2019-03-28 发布于浙江
  • 举报
个人近期工作汇报 面向切面编程(AOP) 什么是面向切面编程(AOP)? AOP : AOP是OOP的延续,全称是 Aspect-Oriented Programming,中文翻译是面向方面的编程或者面向切面的编程。 AOP和OOP的关系: OOP是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系 AOP是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。 AOP是什么样的编程方法 “分离关注”关系 所谓的分离关注就是将某一通用的需求功能从不相关的类中分离出来 同时能够使得很多类共享该通用的需求实现----- 一旦该实现发生变化,只要修改这个“实现”就可以而不影响其它主功能实现。 AOP术语介绍 切面(Aspect):从对象中抽取出来的横切性功能模块。类似与OOP中的一个类。由通知和切入点两部分组成。 通知(Adivice):切面的具体实现,例如具体的日志操作代码,一般是是切面中的某个方法。 连接点(Joinpoint):目标对象中插入通知的地方。即advice的应用位置。 切入点(Pointcut):切面的一部分,对应一个表达式,定义了advice应该被插入到什么样的Joinpoint点上,即 advice的应用范围 AOP术语介绍 目标对象(Target) :就是那些即将切入切面的对象,也就是那些被通知的对象。这些对象中已经只剩下干干净净的核心业务逻辑代码了,所有的共有功能代码等待AOP容器的切入。 代理对象(Proxy) :将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象的功能等于目标对象的核心业务逻辑功能加上共有功能。代理对象对于使用者而言是透明的,是程序运行过程中的产物。 织入(Weaving) :将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。 AOP实现原理 如图:AOP 实际上是由目标类的代理类实现的。AOP 代理其实是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用。AOP 代理包含了目标对象的全部方法,但 AOP 代理中的方法与目标对象的方法存在差异,AOP 方法在特定切入点添加了增强处理,并回调了目标对象的方法。 AOP基于代理的实现 不使用aop思想的实现: AOP基于代理的实现 使用静态代理模式实现Aop来实现日志服务: AOP基于代理的实现 使用动态代理模式实现Aop来实现日志服务: Spring AOP 的实现 谢谢! 开发人员在编写应用程序时,通常包含两种代码:一种是和业务系统有关系的代码,一种是和业务系统关系不大的代码,例如日志,事务处理,权限处理等等。以前的程序中,这两种代码是写在一起的。这样一来,程序中到处充满着相同或类似的代码,不利于维护。而Aop的目标就是使这两种代码分离解耦,这样程序员就能专心于业务的处理,而且达到维护和重用的目的。 拿日志记录这个例子来看。每个方法都需要进行日志记录,不使用Aop的时候,每个方法中都要包含日志记录的代码,这样就会产生重复,而且日志记录和业务代码紧紧耦合,不利于维护。使用AOP的思想,可以把日志看成是一个切面,所有需要日志记录的方法都要经过这个切面。这样就可以把日志记录的代码封装,当方法经过切面的时候执行,这样就实现了代码重用。 * AOP就是这种实现分散关注的编程方法,它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题 纵向关注点是oop需要解决的,而横向的就是AOP解决的问题。 * 所有编译器产生的函数都是public,为组织这些函数被创建出来,你得自行声明他们,为了让产生的类不支持copy 你可以将它们生成为private class Uncopyable { private: Uncopyable(const Uncopyable); Uncopyable operator(const Uncopyable); }; * 所有编译器产生的函数都是public,为组织这些函数被创建出来,你得自行声明他们,为了让产生的类不支持copy 你可以将它们生成为private class Uncopyable { private: Uncopyable(const Uncopyable); Uncopyable operator(const Uncopya

文档评论(0)

1亿VIP精品文档

相关文档