动态代理的应用:AOP(面向切面编程)+AOP和OOP区别+核心概念+Advice通知类型

2023-05-16

文章目录

  • 百度百科
  • 与OOP的区别
  • 核心概念
  • Advice通知类型

百度百科

🌐在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

🔺主要功能
日志记录,性能统计,安全控制,事务处理,异常处理等等。
🔺主要意图
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

与OOP的区别

🔻 OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。

🔻 AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。

🔷举个简单的例子,对于“雇员”这样一个业务实体进行封装,自然是OOP/OOD的任务,我们可以为其建立一个“Employee”类,并将“雇员”相关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。
同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP对一个动作进行封装,则有点不伦不类。
换而言之,OOD/OOP面向名词领域,AOP面向动词领域

核心概念

横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点被称为横切关注点

切面(aspect):类是对物体特称的抽象,切面就是对横切关注点的抽象

连接点(joinpoint):指被拦截到的点,因为spring只支持方法类型的连接点,这个指的就是被拦截到的方法,实际上,连接点还可以是字段或者构造器

切入点(pointcut):对连接点进行拦截的定义,就是找需要在哪里执行spring的方法

通知(advice):所谓通知指的就是拦截到连接点之后的要执行的代码,通知分为前置、后置、异常、最终、环绕通知5类

目标对象:代理的目标对象

织入(weave):将切面应用到目标对象并导致代理对象创建的过程

引入(introduction):在不修改代码的前提下,引入可以在运行为类动态地添加一些方法或字段

在这里插入图片描述
AOP简单理解就是它就像一把刀,在代码执行过程中,可以随意的插入或者拔出,并且在插入位置或拔出位置可以“任意妄为”地做自己喜欢的事情,这里就是指一些日志、控制事务、安全验证事务等。

Advice通知类型

1.前置通知(before advice):在连接点前面执行,对连接点不会造成影响(前置通知有异常的话,会对后续操作有影响),除非此处抛出异常

2.正常返回通知(after returning advice):在连接点正确执行之后执行,如果连接点抛异常,则不执行

3.异常返回通知(after throw Advice):在连接点抛异常后执行

4.后通知(after):无论连接点是正确执行还是抛异常,都会执行

5.环绕通知(around):围绕在连接点前后执行,这是最强大的通知类型,能在方法调用前后自定义一些操作,而且环绕通知还需要负责决定是继续处理join point还是终端执行(必须在环绕通知中决定是继续处理还是中断执行,使用PreceedingJoinPonit下的方法决定是继续还是中断)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态代理的应用:AOP(面向切面编程)+AOP和OOP区别+核心概念+Advice通知类型 的相关文章

随机推荐