ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Aop总结

2021-07-11 12:02:10  阅读:209  来源: 互联网

标签:总结 Spring Advice Aop 关注点 通知 AOP 横切 切面


一、什么是AOP

面向方面的编程(AOP)是一种编程技术,是面向对象编程的补充,它也提供了模块化。

在面向对象编程中,关键的单元是对象,AOP的关键单元是切面,或者说关注点。一些切面可能有集中的代码,但是有些可能被分散或者混杂在一起,它允许程序员模块化横切关注点或行为,这些问题或行为跨越典型的责任分工,例如日志记录和事务管理。

二、关注点和横切关注点

(1)关注点

应用的模块中实现的行为。关注点可以被定义为:我们想实现以解决特定业务问题的方法。
(2)横切关注点

贯穿整个应用程序的关注点。像日志、安全和数据转换,它们在应用的每一个模块都是必须的,所以他们是一种横切关注点。

三、AOP 术语

1、连接点(Joinpoint)
连接点描述的是程序执行的某个特定位置

2、切入点(Pointcut)
切入点是一个连接点的过滤条件,AOP 通过切点定位到特定的连接点

3、通知(Advice)、增强或横切关注点
切面在某个具体的连接点采取的行为或行动,称为通知。

切面的核心逻辑代码都写在通知中,有人也称之为增强或者横切关注点。

通知是切面功能的具体实现,通常是业务代码以外的需求,如日志、验证等,这些被模块化的特殊对象

4、通知器(Advisor)
通知器由一个切入点(pointcut)和一个通知(Advice)组成。通知就是增强的那部分功能代码,如记录日志代码、控制权限代码

5. 切面(Aspect)
与通知器(advisor)类似都是通知+切入点。区别在于,切面中的类无需实现通知接口,但需要在配置文件中指定类中的方法名;

而通知器仅需指定类名即可,因为通知器中的类都实现了通知接口,很明确的知道通知方法是哪个。

6、目标(Target)
被通知的对象(方法)

7、代理(Proxy)
向目标对象应用通知之后创建的对象

8、引介(Introduction)

引介是一种特殊的增强,它为类添加一些属性和方法。

即使一个业务类原本没有实现某个接口,通过AOP的引介功能,我们可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类

9、织入(weaving)
织入是将切面与外部的应用类型或者类连接起来以创建通知对象(adviced object)的过程。

三种织入的方式:
a、编译期织入,这要求使用特殊的Java编译器。
b、类装载期织入,这要求使用特殊的类装载器。
c、动态代理织入,在运行期为目标类添加增强生成子类的方式。
Spring采用动态代理织入,而AspectJ采用编译期织入和类加载期织入。
AspectJ:编译时织入、后编译时织入(post-compile-time weaving)、类加载时织入(load-time weaving, LTW)
 

四、AOP可用的实现

基于Java的主要AOP实现有:

AspectJ
Spring AOP
JBoss AOP

五、AOP的通知类型

通知(advice)是在程序中想要应用在其他模块中的横切关注点的实现。

Advice主要有以下5种类型:

1、前置通知(Before Advice):@Before

2、返回之后通知(After Retuning Advice):@AfterReturning

3、抛出(异常)后执行通知(After Throwing Advice):@AfterThrowing 

4、后置通知(After Advice):无论连接点是通过什么方式退出,@After 

5、围绕通知(Around Advice): @Around 

六、AOP 代理

代理是使用非常广泛的设计模式。Spring AOP是基于代理实现的
AOP 代理是一个由 AOP 框架创建的用于在运行时实现切面协议的对象
Spring AOP默认为 AOP 代理使用标准的 JDK 动态代理
Spring AOP 也可以使用 CGLIB 代理


 

标签:总结,Spring,Advice,Aop,关注点,通知,AOP,横切,切面
来源: https://blog.csdn.net/moakun/article/details/118652372

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

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

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

ICode9版权所有