ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java在线学习-springAOP的基础原理和优点

2020-12-07 21:30:16  阅读:224  来源: 互联网

标签:java 在线 连接点 通知 切点 切面 AOP springAOP 行为


鲁班学院 java在线学习-springAOP的基础原理和优点

我们知道在OOP中模块化的关键单元是类,类封装了一类对象的行为和状态,当多个类有共同的属性和行为时候我们把这些共同的东西封装为一个基类,然后多个类可以通过继承基类的方式来复用这些共同的东西,如果子类需要定制基类行为则可以使用多态。
在这里插入图片描述
OOP中使用类来提供封装,继承,多态三个特性。

例如,当我们需要向多个不相关类的某些现有行为添加通用的非业务逻辑时,我们需要计算一些业务方法的执行时间。过去,我们需要计算耗时的行为。编写计算耗时的代码。在OOP中,分散在多个不涉及业务的类中的代码称为跨领域代码。这种方法在OOP中的缺点是会影响业务逻辑行为。计算耗时的代码干扰(业务逻辑行为应仅针对业务),第二个缺点是无法重复使用计算耗时的代码。

在AOP中,模块化单元是方面(Aspect),它将影响多个类的常见行为封装到可重用模块中,然后您可以决定何时拦截哪些类的行为(切点),并使用行为(通知)在封装的可重用模块中,以增强其拦截的业务行为,而无需修改业务模块的代码。该方面是对此的抽象描述。

AOP中有以下基础概念:

Joinpoint(连接点):程序执行期间的某一个点,例如执行方法或处理异常时候的点。在SpringAOP中,连接点总是表示方法的执行。

Advice(通知):通知是指一个切面在特定的连接点要做的事情。通知分为方法执行前通知,方法执行后通知,环绕通知等。许多AOP框架(包括Spring)都将通知建模为拦截器,在连接点周围维护一系列拦截器(形成拦截器链),对连接点的方法进行增强。

Pointcut(切点):一个匹配连接点(Joinpoint)的谓词表达式。通知(Advice)与切点表达式关联,并在切点匹配的任何连接点(Joinpoint)(例如,执行具有特定名称的方法)上运行。切点是匹配连接点(Joinpoint)的表达式的概念,是AOP的核心,并且Spring默认使用AspectJ作为切入点表达式语言。

Aspect(切面):它是一个跨越多个类的模块化的关注点,它是通知(Advice)和切点(Pointcut)合起来的抽象,它定义了一个切点(Pointcut)用来匹配连接点(Joinpoint),也就是需要对需要拦截的那些方法进行定义;它定义了一系列的通知(Advice)用来对拦截到的方法进行增强;

Targetobject(目标对象):被一个或者多个切面(Aspect)通知的对象,也就是需要被AOP进行拦截对方法进行增强(使用通知)的对象,也称为被通知的对象。由于在AOP里面使用运行时代理,所以目标对象一直是被代理的对象。

AOPproxy(AOP代理):为了实现切面(Aspect)功能使用AOP框架创建一个对象,在Spring框架里面一个AOP代理要么指JDK动态代理,要么指CgLIB代理。

Weaving(织入):是将切面应用到目标对象的过程,这个过程可以是在编译时(例如使用AspectJ编译器),类加载时,运行时完成。SpringAOP和其它纯JavaAOP框架一样,是在运行时执行植入。

Advisor:这个概念是从Spring1.2的AOP支持中提出的,一个Advisor相当于一个小型的切面,不同的是它只有一个通知(Advice),Advisor在事务管理里面会经常遇到,这个后面会讲到。

相比OOP,AOP有以下优点:

业务代码更加简洁,例如当需要在业务行为前后做一些事情时候,只需要在该行为前后配置切面进行处理,无须修改业务行为代码。

切面逻辑封装性好,并且可以被复用,例如我们可以把打日志的逻辑封装为一个切面,那么我们就可以在多个相关或者不相关的类的多个方法上配置该切面。

标签:java,在线,连接点,通知,切点,切面,AOP,springAOP,行为
来源: https://blog.csdn.net/LuBanXue/article/details/110842125

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有