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.hqwc.cn/news/216895.html

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

相关文章

微信公众号对接获取用户openid预约项目心路全历程

公众号对接获取openid全历程 一、背景二、选型三、开始修改若依框架四、自己搭后端框架五、前端框架uni-app修改六、对接获取公众号登录用户openId七、总结 一、背景 老板接了朋友的一个公众号需求,要求做一个简单的疫苗预约系统。功能是获取当前登录用户&#xff0…

系列十五、BeanDefinition

一、BeanDefinition 1.1、概述 BeanDefinition是一个接口,主要负责存储bean的定义信息,决定bean的生产方式,类似于说明书。后续BeanFactory就可以根据这些信息生产bean了。比如实例化:可以通过反射得到实例对象;比如&…

【版本管理 | Git 】Git最佳实践系列(一) —— LFS .gitignore 最佳实践,确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

【腾讯云云上实验室-向量数据库】用向量数据库——实现高效文本检索功能

文章目录 前言Tencent Cloud VectorDB 简介Tencent Cloud VectorDB 使用实战申请腾讯云向量数据库腾讯云向量数据库使用步骤腾讯云向量数据库实现文本检索 结论和建议 前言 想必各位开发者一定使用过关系型数据库MySQL去存储我们的项目的数据,也有部分人使用过非关…

Kafka配置SASL认证密码登录

​​​​​​1、修改config/server.properties,添加如下内容 listenersSASL_PLAINTEXT://内网ip:9092 advertised.listenersSASL_PLAINTEXT://外网ip:9092 security.inter.broker.protocolSASL_PLAINTEXT sasl.mechanism.inter.broker.protocolPLAIN sasl.enabled.…

Vue解析器

解析器本质上是一个状态机。但我们也曾提到,正则表达式其实也是一个状态机。因此在编写 parser 的时候,利用正则表达式能够让我们少写不少代码。本章我们将更多地利用正则表达式来实现 HTML 解析器。另外,一个完善的 HTML 解析器远比想象的要…

高性能Mysql第三版学习(一)

学习目标: 高性能Mysql第3版 学习内容: MySQL架构与历史Mysql基座测试服务器性能Schema与数据类型优化创建高性能的索引查询性能优化Mysql高级特性Explain 学习时间: 周一至周五晚上 9点—晚上10点周六晚上9点-10点周日晚上9 点-10点 学习…

鸿蒙开发-ArkTS 语言-基础语法

1. 初识 ArkTS 语言 ArkTS 是 HarmonyOS 优选主力开发语言。ArkTS 是基于 TypeScript (TS) 扩展的一门语言,继承了 TS 的所有特性,是TS的超集。 主要是扩展了以下几个方面: 声明式UI描述和自定义组件: ArkTS使用声明式的方式描述用…

java计算下一个整10分钟时间点

最近工作上遇到需要固定在整10分钟一个周期调度某个任务,所以需要这样一个功能,记录下 package org.example;import com.google.gson.Gson; import org.apache.commons.lang3.time.DateUtils;import java.io.InputStream; import java.util.Calendar; i…

JWT和Token之间的区别

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…

鸿蒙开发之android开发人员指南《基础知识》

基于华为鸿蒙未来可能不再兼容android应用,推出鸿蒙开发系列文档,帮助android开发人员快速上手鸿蒙应用开发。 1. 鸿蒙使用什么基础语言开发? ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风…

vcsa6.7 5480无法登录

停电维护硬件后,发现vcsa异常,https://ip:5480无法登录,https://ip/ui正常,ssh登录页正常 kb资料 通过端口 5480 登录到 VMware vCenter Server Appliance Web 控制台失败 (2120477) 操作过程 Connecting to 192.16.20.31:22..…