spring aop核心原理概念

目录

  • 概述
  • aop核心概念解析
    • Target(目标对象)
    • Joinpoint(连接点)
    • Advice(通知/增加)
    • Pointcut(切入点)
    • Aspect(切面)
    • Advisor(通知器)
    • Weaving(织入)
    • Proxy(代理)
    • Introduction(引介)
  • 结束

概述

aop核心概念解析

Target(目标对象)

代理的目标对象
目标对象(Target)的确立,是由切入点来决定的。
增加的对象是具体的方法。

// 切入点表达式,按表达式过滤服务的类,找到其对应符合的目标对象
execution(* com.**.ServiceImpl.*())

方法选择好之后,还要再选择通知类型
通知器(Advisor)/切面(Aspect) 是一样的概念,只是描述不一样。

  • 前置通知
  • 后置通知
  • 最终通知
  • 异常通知
  • 环绕通知

连接点(JointPoint) 可以看成是目标对象和代理对象所连接的方法。其实就是目标对象的方法;通过该连接点可以获取目标方法

Joinpoint(连接点)

所谓连接点是指那些被拦截到的点。在 spring 中这些点指的是方法,因为 spring 只支持方法类型的连接点。

  • 待增强的目标对象中的目标方法
  • 增强功能和目标对象的连接地点

Advice(通知/增加)

所谓通知是指拦截到 JointPoint 之后所要做的事情就是通知。通知分为前置通知、后置通知、异常通知、最终通知、环绕通知(切面要完成的功能)

  • 通知类型:表示增强功能要执行的时机
    • 前置通知
    • 后置通知
    • 最终通知
    • 异常通知
    • 环绕通知
  • 通知功能
    • 自定义的一些功能类,功能类中含多个办法,每一个方法,就是一个通知功能。

Pointcut(切入点)

所谓切入点是指要对哪些 Jointpoint 进行拦截的定义。

  • 通过切入点表达式,去匹配合适的目标对象,可能有很多对象,但是只有部分对象需要进行功能增强。
  • 切入点表达式:aop

Aspect(切面)

是切入点和通知的结合,需要自己来编写和配置的。

Advisor(通知器)

Aspect 很相似。

Weaving(织入)

是指将增强应用到目标对象来创建新的代理对象的过程

  • 静态织入

    • 编译期间
    • AspectJ 技术使用的就是静态织入
    • 静态织入原理
      在这里插入图片描述
  • 动态织入

    • 运行期间
    • spring aop 技术使用的就动态织入
    • 动态织入的方式
      • 基于 jdk 动态代理实现
      • 基于cglib 动态代理实现

Proxy(代理)

一个类被 aop 织入增强后,就产生了一个结果,代理类。

  • 在 spring 中,一个目标对象可以产生一个代理对象

Introduction(引介)

引介是一种特殊的通知,在不修改类代码的前提下,Introduction 可以在运行期为类动态的添加一些方法或Field

结束

spring aop核心原理概念,至此结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】挑战100天 Day14(热题+面试经典150题)

【LeetCode】挑战100天 Day14(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-162.1 题目2.2 题解 三、面试经典 150 题-163.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&…

抓住机会:2024年企业生成式AI应用的未来

在 Menlo Ventures 的AI趋势研究报告中,对美国和欧洲的 450 多名企业高管进行了调查,并与另外十几位高管进行了交谈,以了解当今企业应用AI的状况。尽管大肆宣传,与其他软件类别相比,企业对生成式AI的投资仍然小得惊人。…

十大排序算法中的插入排序和希尔排序

文章目录 🐒个人主页🏅算法思维框架📖前言: 🎀插入排序 时间复杂度O(n^2)🎇1. 算法步骤思想🎇2.动画实现🎇 3.代码实现 🎀希尔排序 时间复杂度O(n*logn~n^2)希尔排序的设…

Matplotlib图形配置与样式表_Python数据分析与可视化

Matplotlib图形配置与样式表 配置图形修改默认配置rcParams样式表 Matplotlib的默认图形设置经常被用户诟病。虽然2.0版本已经有了很大改善,但是掌握自定义配置的方法可以让我们打造自己的艺术风格。 配置图形 我们可以通过修个单个图形配置,使得最终图…

【Web】攻防世界 难度3 刷题记录(1)

目录 ①lottery ②ics-05 ③mfw ④simple_js ⑤fakebook 感觉自己对一些综合题的熟练度不太够,专项训练一下 ①lottery 抽奖赚钱,钱够9990000可买flag 随便输一串数字抓包,然后查看到一个post请求,api.php,题目里面有附件…

基于C#实现外排序

一、N 路归并排序 1.1、概序 我们知道算法中有一种叫做分治思想,一个大问题我们可以采取分而治之,各个突破,当子问题解决了,大问题也就 KO 了,还有一点我们知道内排序的归并排序是采用二路归并的,因为分治…

MySQL与PostgreSQL 的一些SQL

MySQL 1、MYSQL输出重定向 将SQL内容输出到文件 nohup mysql -h127.0.0.1 -uroot -ppassword -Ne "sql语句;" > /home/mysql/data/xxxxx.txt &2、时间格式转换 时间转换,转10位时间戳 select UNIX_TIMESTAMP(2021-02-27 00:00:00)SELECT …

机器学习中的混淆矩阵

混淆矩阵是用于评估分类模型性能的表格,它展示了模型在不同类别上的预测情况。对于二分类问题,混淆矩阵的构成如下: 假设有两个类别:正例(Positive)和负例(Negative)。 真正例&…

小总结----长度

看了上一篇文章,已经一年没发了。CSDN也越来越封闭了,查点东西,也很不友好。 来个小总结吧:完成团队建设,招聘11人。完成26项开发,内部9项,科创10项。2023发明专利申请两项,软著申请…

【Leetcode合集】20. 有效的括号

20. 有效的括号 20. 有效的括号 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串…

一盏茶的时间,入门 Node.js

一、.什么是 Node.js? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建高性能、可伸缩的网络应用。 它采用事件驱动、非阻塞 I/O 模型,使其在处理并发请求时表现出色。 二、安装 Node.js 首先,让我们从 Node.…

【STM32】新建工程

学习来源:[2-2] 新建工程_哔哩哔哩_bilibili 目前STM32的开发主要有基于寄存器的开发方式、基于标准库也就是库函数的方式和基于HAL库的方式。本学习是基于库函数的方式。(各种资料去百度云下载) 1 建立工程文件夹 Keil中新建工程&#xf…

2824. 统计和小于目标的下标对数目 : 详解 “左找右“ “右找左“ 两种方式

题目描述 这是 LeetCode 上的 「2824. 统计和小于目标的下标对数目」 &#xff0c;难度为 「简单」。 Tag : 「排序」、「二分」、「双指针」 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target&#xff0c;请你返回满足 0 < i < j < n 且 nums[i] n…

ultralytics yolov8 实例分割 训练自有数据集

参考: https://docs.ultralytics.com/datasets/segment/coco/ http://www.bryh.cn/a/613333.html 1、数据下载与转换yolo格式 1)数据集下载: 参考:https://universe.roboflow.com/naumov-igor-segmentation/car-segmetarion 下载的是coco格式,需要转换 2)coco2yolo t…

C语言——指针(二)

&#x1f4dd;前言 上篇文章C语言——指针&#xff08;一&#xff09;初步讲解了&#xff1a; 1&#xff0c;指针与指针变量 2&#xff0c;指针变量的基本使用&#xff08;如何定义&#xff0c;初始化&#xff0c;引用&#xff09; 这篇文章我们进一步探讨&#xff0c;使用指针…

常见树种(贵州省):017柳树、喜树、珙桐、木棉、楝、枫杨、竹柏、百日青、翅荚香槐、皂荚、灯台树

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、柳树 …

idea自动切换输入法Smart Input

idea搜索后下载 红色表示中文输入法 再ideavim场景下会自动切换成英文非常好用强烈推荐下载一个

vue3(一)-基础入门

一、导入vue.js 1.可以借助 script 标签直接通过 CDN 来使用 Vue <!-- <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> -->2.也可以下载vue.global.js文件并在本地导入 <script src"./lib/vue.global.js">&…

Java中HashMap、Hashtable和ConcurrentHashMap的区别

介绍&#xff1a; 在Java编程中&#xff0c;HashMap、Hashtable和ConcurrentHashMap都是用于存储键值对的常见数据结构。尽管它们在表面上看起来很相似&#xff0c;但实际上它们之间存在一些重要的区别。本文将深入探讨HashMap、Hashtable和ConcurrentHashMap的区别&#xff0c…

代码随想录算法训练营第四十四天|57. 爬楼梯、322.零钱兑换、279. 完全平方数

KamaCoder 57. 爬楼梯 题目链接&#xff1a;题目页面 (kamacoder.com) 这道题使用完全背包来实现&#xff0c;我们首先考虑的是总的楼梯数&#xff0c;因此dp数组大小为n 1 &#xff0c;其意义是&#xff0c;在n阶时有多少种方法爬到楼顶&#xff0c;因此&#xff0c;当前n状…