面向切面编程(AOP)的理解

AOP是什么(Aspect   Oriented   Programming)

  • AOP是一种编程范式,提供从还有一个角度来考虑程序结构以完好面向对象编程(OOP)。
  • AOP为开发人员提供了一种描写叙述横切关注点的机制,并可以自己主动将横切关注点织入到面向对象的软件系统中。从而实现了横切关注点的模块化。
  • AOP可以将那些与业务无关,却为业务模块所共同调用的逻辑或责任。比如事务处理、日志管理、权限控制等。封装起来,便于降低系统的反复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

AOP能干什么,也是AOP带来的优点

  • 减少模块的耦合度
  • 使系统easy扩展
  • 设计决定的迟绑定:使用AOP,设计师能够推迟为将来的需求作决定,由于它
  • 能够把这样的需求作为独立的方面非常easy的实现。
  • 更好的代码复用性

在传统的编写业务逻辑处理代码时,我们一般会习惯性地做几件事情:日志记录、事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码。当代码编写完毕回头再看时,不禁发现。扬扬洒洒上百行代码中。真正用于核心业务逻辑处理才那么几行。如图6-4所看到的。

方法复方法。类复类,就这样子带着无可奈何遗憾地度过了多少个春秋。这倒也罢。倘若到了项目的尾声,突然决定在权限控制上须要进行大的变动时。成千上万个方法又得一一"登门拜訪",痛苦"雪上加霜"。

 

假设能把图6-4中众多方法中的所有共同拥有代码所有抽取出来,放置到某个地方集中管理。然后在详细执行时,再由容器动态织入这些共同拥有代码的话,最起码能够解决两个问题:

Java EE程序猿在编写详细的业务逻辑处理方法时,仅仅需关心核心的业务逻辑处理,既提高了工作效率。又使代码变更简洁优雅。

在日后的维护中因为业务逻辑代码与共同拥有代码分开存放。并且共同拥有代码是集中存放的,因此使维护工作变得简单轻松。

面向切面编程AOP技术就是为解决问题而诞生的。切面就是横切面,如图6-5所看到的,代表的是一个普遍存在的共同拥有功能,比如。日志切面、权限切面及事务切面等。

 

以下我们以用户管理业务逻辑组件UserService的AOP实现过程(见图6-6)为例,深度剖析一下AOP技术的实现原理。AOP技术是建立在Java语言的反射机制与动态代理机制之上的。业务逻辑组件在执行过程中,AOP容器会动态创建一个代理对象供使用者调用,该代理对象已经按Java EE程序猿的意图将切面成功切入到目标方法的连接点上。从而使切面的功能与业务逻辑的功能同一时候得以执行。从原理上讲,调用者直接调用的事实上是AOP容器动态生成的代理对象。再由代理对象调用目标对象完毕原始的业务逻辑处理。而代理对象则已经将切面与业务逻辑方法进行了合成。

 

现将图6-6中涉及到的一些概念解释例如以下。

切面(Aspect):由切点和增强组成,既包含了横切逻辑的定义。也包含了连接点的定义。

通知(Advice):是切面的详细实现。

以目标方法为參照点,依据放置的地方不同,可分为前置通知(Before)后置返回通知(AfterReturning)后置异常通知(AfterThrowing)后置终于通知(After)围绕通知(Around)5种。在实际应用中一般是切面类中的一个方法。详细属于哪类通知。相同是在配置中指定的。

连接点(Joinpoint):程序运行的某个特定的位置。比方类初始化前,初始化后。方法调用前。方法调用后等等

切入点(Pointcut):用于定义通知应该切入到哪些连接点上。

不同的通知通常须要切入到不同的连接点上,这样的精准的匹配是由切入点的正則表達式来定义的。

目标对象(Target):增强逻辑的织入目标类。

代理对象(Proxy):将通知应用到目标对象之后被动态创建的对象。

能够简单地理解为,代理对象的功能等于目标对象的核心业务逻辑功能加上共同拥有功能。代理对象对于使用者而言是透明的。是程序执行过程中的产物。

织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程。

这个过程能够发生在编译期、类装载期及执行期,当然不同的发生点有着不同的前提条件。

譬如发生在编译期的话。就要求有一个支持这样的AOP实现的特殊编译器;发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;仅仅有发生在执行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。

增强:织入到目标类连接点上的一段代码

时间: 2024-12-05 14:29:44

面向切面编程(AOP)的理解的相关文章

转:面向切面编程AOP的理解

AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合.不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能.日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性.异常处理和透明的持续性也都是如此,这种散布在各

spring中面向切面编程(AOP)的个人理解

面向切面编程AOP,是spring的一大特点 Aspect切面:封装共性功能的(增强功能的)类 Advice通过:切面类中封装的增强功能的方法. PointCut:切入点,是一个集合的概念,该集合的表达使用一个正则表达式表达 所有核心业务对象的所有方法的前后(事务处理AOP典型的应用) JoinPoint:连接点,程序中需要加入advice的地方,而且正在执行的ponitCut 织入(Weaving):将aspect和核心业务对象,进行整合的过程. 通过特定接口实现AOp Aop通知的类型: B

Web项目中静态代理和动态代理为基础的面向切面编程AOP

本来每天更新的,我一般喜欢夜里过了十二点的时候发文章,结果难道是愚人节吗?学校的网也很有意思,断了,把我给耍了...好吧-开始今天的话题AOP.AOP太重要了,所以放到第二篇文章来谈这个话题,AOP是Spring中的重要概念.如果这个不理解Web开发中的三大框架的原理,那就呵呵了.时常听到同学和网友议论Web程序员大部分时间都是在考皮XML配置,我当时听到也是醉了,所以我要用心学习Web,其实这里面蕴含的设计模式.算法.架构思想在源码中体现的淋漓尽致啊,一个大宝库竟然视而不见可惜了.下面就一起品

面向切面编程——Aop

一.概念 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.它是一种新的方法论,它是对传统OOP编程的一种补充. 二.Aop原理 1.面向对象编程模型 OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分.面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等

Spring(四):面向切面编程AOP

横切关注点:分布于应用中多处的功能 面向切面编程AOP:将横切关注点与业务逻辑相分离 在使用面向切面编程时,仍在一个地方定义通用功能,但是可以通过声明的方式定义这个功能以何种方式在何处应用,而无需修改受影响的类. 横切关注点可以被模块化为特殊的类,这些类被称为切面. 好处: 每个关注点集中于一处,而不是分散到多处代码中 服务模块更加简洁,因为它们只包含主要关注点的代码,次要关注点被转移到切面中了 1.定义AOP术语 1.1.通知(Advice) 切面的工作被称为通知. 通知定义了切面是什么以及何

面向切面编程aop

面向切面编程 (AOP) Aspect Oriented Programming 可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性,AOP可以说也是这种目标的一种实现. 主要功能 日志记录,性能统计,安全控制,事务处理,异常处理等等 主要意图 将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的

【串线篇】面向切面编程AOP

面向切面编程AOP 描述:将某段代码“动态”的切入到“指定方法”的“指定位置”进行运行的一种编程方式 (其底层就是Java的动态代理)spring对其做了简化书写 场景: 1).AOP加日志保存到数据库 2).AOP做权限验证,filter能做的它都能 3).AOP做安全检查 4).AOP做事务控制 AOP专业术语: 原文地址:https://www.cnblogs.com/yanl55555/p/11744089.html

Spring之面向切面编程AOP(二)

简介 当积累的知识点到一定量的时候,学新知识就变得容易多了.希望再接下来的学习顺利进行下去.今天知识也是挺简单的,主要就是AOP面向切面编程.其中牵涉到了JDKProxy和CGLIB两个代理类,如何使用好,加以深刻理解.学起Spring切面编程也就简单多了 代理模式 1. 代理模式介绍 代理模式的英文叫做Proxy或Surrogate,中文都可译为"代理",所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对

面向切面编程(AOP)

结合设计模式,通过代码理解面向切面编程 通过,结构型设计模式,装饰器模式来实现AOP /// <summary> /// 装饰器模式实现静态代理 /// AOP 在方法前后增加自定义的方法 /// </summary> public class DecoratorAOP { public static void Show() { User user = new User() { Name = "Eleven", Password = "12312312

Spring(二)面向切面编程AOP

这篇博客写的比较累赘,好多相同的程序写了好几遍,主要是为了是自己养成这样的一个编程思路,其中应该不乏错误之处,以后好好学,慢慢改吧.------jgp 1 AOP介绍 1.1什么是AOP 面向切面编程(Aspect Oriented Programing):通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP采取横向抽取机制,取代了传统纵向继承体系的重复性代码,主要体现在事务处理.日志管理.权限控制.异常处理等方面,使开发人员在编写业务逻辑时可以专心于核心业务,提高了代码的可