什么是面向切面编程

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

AOP相关术语

通知(Advice)

在AOP术语中,切面的工作被称为通知。通知定义了切面是什么以及何时使用,通知还解决了何时执行。
spring切面有5种通知类型

  • 前置通知(Before):在目标方法被调用之前调用通知功能;
  • 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输入是什么;
  • 返回通知(After-returning):在目标方法成功执行之后调用通知
  • 异常通知(After-throwing):在目标方法抛出异常后调用通知
  • 环绕通知(Around):通知包括了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为

连接点(Join point)

程序执行的某个特定位置:如类开始初始化前、类初始化后、类某个方法调用前、调用后、方法抛出异常后。一个类或一段程序代码拥有一些具有边界性质的特定点,这些点中的特定点就称为“连接点”。Spring仅支持方法的连接点,即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用前后这些程序执行点织入增强。连接点由两个信息确定:第一是用方法表示的程序执行点;第二是用相对点表示的方位。

切点(Pointcut)

每个程序类都拥有多个连接点,如一个拥有两个方法的类,这两个方法都是连接点,即连接点是程序类中客观存在的事物。AOP通过“切点”定位特定的连接点。连接点相当于数据库中的记录,而切点相当于查询条件。切点和连接点不是一对一的关系,一个切点可以匹配多个连接点。在Spring中,切点通过org.springframework.aop.Pointcut接口进行描述,它使用类和方法作为连接点的查询条件,Spring AOP的规则解析引擎负责切点所设定的查询条件,找到对应的连接点。其实确切地说,不能称之为查询连接点,因为连接点是方法执行前、执行后等包括方位信息的具体程序执行点,而切点只定位到某个方法上,所以如果希望定位到具体连接点上,还需要提供方位信息。

织入(Weaving)

织入是将增强添加对目标类具体连接点上的过程。AOP像一台织布机,将目标类、增强或引介通过AOP这台织布机天衣无缝地编织到一起。根据不同的实现技术,AOP有三种织入的方式:
a、编译期织入,这要求使用特殊的Java编译器。
b、类装载期织入,这要求使用特殊的类装载器。
c、动态代理织入,在运行期为目标类添加增强生成子类的方式。
Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

切面(Aspect)

切面是通知和切点的结合

springboot整合aop简单例子

代码在github上

package com.sl.aop;import org.aspectj.lang.annotation.*;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;/*** @author shuliangzhao* @Title: AopLog* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/10/13 15:18*/
@Aspect
@Component
@EnableAspectJAutoProxy
public class AopLog {@Pointcut("execution(* com.sl..*.*(..))")public void pointcut() {}@Before("pointcut()")public void before() {System.out.println("方法执行前...");}@After("pointcut()")public void after() {System.out.println("方法执行后...");}@Around("pointcut()")public void around() {System.out.println("环绕执行方法...");}@AfterThrowing("pointcut()")public void ffterThrowing() {System.out.println("方法执行失败...");}
}

名词解释:
例: execution (* com.sl.service…*. *(…))

整个表达式可以分为五个部分:

1、execution()::表达式主体。

2、第一个*号:表示返回类型, *号表示所有的类型。

3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service包、子孙包下所有类的方法。

4、第二个*号:表示类名,*号表示所有的类。

5、*(…):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数

Spring AOP相关术语解释及简单使用相关推荐

  1. 动态代理——》AOP —— Spring 中的 AOP||AOP 相关术语||学习 spring 中的 AOP 要明确的事

    AOP 概述 什么是 AOP       AOP:全称是 Aspect Oriented Programming 即:面向切面编程 AOP 的作用及优势 作用: 在程序运行期间,不修改源码对已有方法进 ...

  2. 分享:aop 相关术语介绍之 本人通俗易懂大白话介绍

    文章目录 1. 前言 2. aop 相关术语介绍 2.1 AOP 的理解 2.2 Joinpoint(连接点) 2.2.1 spring 官方文档解释 2.2.2 个人理解 2.3 Pointcut( ...

  3. property field java_Java 中 field 和 variable 区别及相关术语解释

    原标题:Java 中 field 和 variable 区别及相关术语解释 先说一下 field 和 variable 之间的区别: class variables and instance vari ...

  4. ppst——技术视频spring AOP 的原理讲解和简单实现

    ppst 技术视频--spring AOP 的原理讲解和简单实现:请访问ppst 技术视频分享平台 , www.ppst.cc,上面有最新的技术视频,推荐大家把博客录制成视频吧,可以获取收益哦 1.s ...

  5. NLP:自然语言处理技术之词语级别相关术语解释(如上位词/WordNet)、基于词汇层面的词法分析六大任务(分词/词性标注/词干提取-词形还原/新词发现/形态分析/拼写校正)的简介及其应用

    NLP:自然语言处理技术之词语级别相关术语解释(如上位词/WordNet).基于词汇层面的词法分析(Lexical Analysis)六大任务(分词/词性标注/词干提取-词形还原/新词发现/形态分析/ ...

  6. Spring AOP思想的理解和简单实现

    Spring之Aop的简单实现 所谓Aop,即Aspect Oriented Programming,面向方面编程.这个概念听起来可能有点抽象,所以在这里我们先引入Aop中的一些术语并结合它们来对Ao ...

  7. 结合代码彻底理解Spring AOP的术语

    每本Spring的书在介绍AOP之前,总能有一箩筐的术语,看半天似懂非懂,也就没兴趣再继续学习下去,其实并没有这么复杂. 难懂的定义我们就不贴了,就说说咱们通俗的解释,下面让我们结合代码来理清楚各个术 ...

  8. 4种实例 advice aop_JAVA动态代理 和 Spring AOP 4种通知的简单实现

    学习Spring AOP 之前,先要了解下JAVA的动态代理.如果不清楚动态代理的概念就百度一下吧.废话不多说,直接上代码. 我们模拟一个简单的登录 首先我们创建一个用户登录的接口 package c ...

  9. 【SSO单点系列】(6):CAS4.0 单点流程序列图(中文版)以及相关术语解释(TGT、ST、PGT、PT、PGTIOU)...

    1.概念相关 ①.术语解释 TGT.ST.PGT.PGTIOU.PT,其中CAS1.0协议中就有的票据,PGT.PGTIOU.PT是CAS2.0协议中有的票据. CAS为用户签发的登录票据,拥有了CA ...

最新文章

  1. 基于Protobuf共享字段的分包和透传零拷贝技术,你了解吗?
  2. Objective-C:GCC+GNUstep配置
  3. WINCE5.0+2443 camera中断不能进来的原因
  4. OpenGL编程指南8:模型组合变换
  5. 看不懂花书?博士教你如何深入深度学习,从编程基础到完整的项目实战
  6. shiro 字段不是username 和password_Shiro整合JWT
  7. android 一个很漂亮的控件ObservableScrollView(含片段代码和源码)
  8. 《信息学奥赛一本通提高篇》第6章 组合数学
  9. 回文质数(洛谷-P1217)
  10. LeetCode 1071. 字符串的最大公因子
  11. 20162316刘诚昊 第十一周学习总结
  12. 力扣-64 最小路径和
  13. JetBrains:修改C盘中的JetBrains家族软件如PyCharm、WebStorm等的缓存文件位置
  14. LayaAir 获取对象边界 getBounds/ getGraphicBounds
  15. Atitit 转移特效attilax总结
  16. txt文件的编码结构
  17. wifi信号衰减与距离关系_(1)WIFI信号确定距离
  18. 程序员应该写文档吗?
  19. android横竖屏切换布局闪退,Android 横竖屏切换以及横屏启动闪退问题
  20. 网页HTML5制作flex布局骰子,css利用flex布局画骰子的六个面

热门文章

  1. Linux学习笔记(一)|目录结构
  2. AI领域首个iF用户体验大奖——第四范式斩获2项德国iF设计奖
  3. 跨境电商Etsy如何使用交互行为类型进行可解释推荐
  4. 信息抽取(一)机器阅读理解——样本数据处理与Baseline模型搭建训练(2020语言与智能技术竞赛)
  5. 推荐算法炼丹笔记:非采样的负样本
  6. 元宇宙大潮来袭?业内首个虚拟形象实时互动融合 SDK 来了!
  7. 互联网1分钟 | 0214 2018 年超1/3的婚姻由约会交友类App促成;刘强东新开设 “南京京东云计算有限公司”...
  8. IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议
  9. rest_framework之解析器详解 05
  10. PB级分布式大数据的处理和分析应用