您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

Spring AOP的8个关键术语:连接点、切点,增强目标等

时间:2020-10-13 09:54:53  来源:  作者:

概念

AOP是“面向方面编程”,要解决的问题是,把重复性的横切逻辑独立出来,然后融合到业务逻辑中,达到和原来一样的业务流程;

AOP的工作重心在于如何将增强应用于目标对象的连接点上。这里包括两项工作:

  • 第一、如何通过切点和增强定位到连接点上:
  • 第二、如何在增强中编写切面的代码。

1、连接点

是程序执行的某个特定位置,如类开始初始化前、类初始化后、类的某个方法调用前/调用后、方法抛出异常后。

一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就被称为“连接点”。

连接点由两个信息确定:

  • 一是用方法表示的程序执行点;
  • 二是用相对位置表示的方位;

2、切点

每个程序类都拥有多个连接点,如一个拥有两个方法的类,这两个方法都是连接点,

即连接点是程序类中客观存在的事物。

但在为数众多的连接点中,如何定位某些感兴趣的连接点呢? AOP 通过“切点”定位特定的接连点。

用数据库查询的概念来理解切点和连接点的关系再合适不过了:连接点相当于数据库中的记录,而切点相当于查询条件。

切点和连接点不是一对一的关系,一个切点可以匹配多个连接点。

在Spring中,切点通过org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件,SpringAOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点。

确切地说,应该是执行点而非连接点,因为连接点是方法执行前、执行后等包括方位信息的具体程序执行点,而切点只定位到某个方法上,所以如果希望定位到具体的连接点上,还需要提供方位信息。

3、增强(Advice)

增强是织入目标类连接点上的一段程序代码,在Spring中,增强除用于描述一段程序代码外, 还拥有另一个和连接点相关的信息,这便是执行点的方位。结合执行点的方位信息和切点信息,就可以找到特定的连接。

正因为增强既包含用于添加到目标连接点上的一段执行逻辑, 又包含用于定位连接点的方位信息,所以Spring 所提供的增强接口都是带方位名的,如BeforeAdvice 、AfterReturningAdvice、ThrowsAdvice 等。

BeforeAdvice 表示方法调用前的位置,而AferRetunningAdvice表示访问返回后的位置。所以只有结合切点和增强,才能确定特定的连接点并实施增强逻辑。

4、目标对象(Target)

目标对象可以理解为业务逻辑,增强逻辑的织入目标类,如果没有AOP,那么业务逻辑需要完成业务逻辑+所有非横切逻辑;

5、引介(Introduction)

引介是一种特殊的增强,它为类添加一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过AOP的引介功能,也可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。

6、织入(Weaving)

织入是将增强添加到目标类的具体连接点上的过程。AOP就像一- 台织布机,将目标类、增强或者引介天衣无缝地编织到- -起。我们不能不说“织入”这个词太精辟了。

根据不同的实现技术,AOP有3种织入方式:

  • (1)编译期织入,这要求使用特殊的JAVA编译器。
  • (2)类装载期织入,这要求使用特殊的类装载器。
  • (3)动态代理织入,在运行期为目标类添加增强生成子类的方式。

Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

7、代理(Proxy)

一个类被AOP织入增强后,就产生了一个结果类,它是融合了原类和增强逻辑的代理类。

根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能就是原类的子类,所以可以采用与调用原类相同的方式调用代理类。

8.切面(Aspect)

切面由切点和增强(引介)组成,它既包括横切逻辑的定义,也包括连接点的定义。

Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入切面所指定的连

接点中。



Tags:Spring AOP   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
概念AOP是“面向方面编程”,要解决的问题是,把重复性的横切逻辑独立出来,然后融合到业务逻辑中,达到和原来一样的业务流程;AOP的工作重心在于如何将增强应用于目标对象的连接点上...【详细内容】
2020-10-13  Tags: Spring AOP  点击:(457)  评论:(0)  加入收藏
基本介绍代理模式是一种结构性设计模式。为对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,并允许在将请求提交给对象前后进行一些处理。被代理的对象...【详细内容】
2020-06-23  Tags: Spring AOP  点击:(139)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(11)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(26)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(55)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条