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.rhkb.cn/news/205953.html

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

相关文章

计算方法 c++代码

环境 &#xff1a;Windows 10 Dev-C 5.11 Lagrange 插值方法 Lagrange 插值多项式&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long #define fer(i,a,b) for(int ia;i<b;i) signed main(){cout<<"拉格朗日插值法&…

Linux加强篇005-用户身份与文件权限

目录 前言 1. 用户身份与能力 2. 文件权限与归属 3. 文件的特殊权限 4. 文件的隐藏属性 5. 文件访问控制列表 6. su命令与sudo服务 前言 悟已往之不谏&#xff0c;知来者之可追。实迷途其未远&#xff0c;觉今是而昨非。舟遥遥以轻飏&#xff0c;风飘飘而吹衣。问征夫以…

【Web】NewStarCTF Week3 个人复现

目录 ①Include &#x1f350; ②medium_sql ③POP Gadget ④R!!!C!!!E!!! ⑤GenShin ⑥OtenkiGirl ①Include &#x1f350; ?filephpinfo 提示查下register_argc_argv 发现为on LFI包含 pearcmd命令执行学习 pearcmd.php文件包含妙用 ?file/usr/local/lib/php/p…

AI模特换装的前端实现

本文作者为 360 奇舞团前端开发工程师 随着AI的火热发展&#xff0c;涌现了一些AI模特换装的前端工具&#xff08;比如weshop网站&#xff09;&#xff0c;他们是怎么实现的呢&#xff1f;使用了什么技术呢&#xff1f;下文我们就来探索一下其实现原理。 总体的实现流程如下&am…

基于Java SSM框架+Vue实现汉服文化平台网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现汉服文化平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个汉服文化平台网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将…

MTK联发科MT6762/MT6763/MT6765安卓核心板参数规格比较

MT6762安卓核心板 MTK6762安卓核心板是一款工业级高性能、可运行 android9.0 操作系统的 4G智能模块。 CPU&#xff1a;4xCortex-A53 up to 2.0Ghz/4xCortex-A53 up to 1.5GhzGraphics&#xff1a;IMG GE8320 Up to 650MhzProcess&#xff1a;12nmMemory&#xff1a;1xLP3 9…

【虚拟机】Docker基础 【二】

2.2.数据卷 容器是隔离环境&#xff0c;容器内程序的文件、配置、运行时产生的容器都在容器内部&#xff0c;我们要读写容器内的文件非常不方便。大家思考几个问题&#xff1a; 如果要升级MySQL版本&#xff0c;需要销毁旧容器&#xff0c;那么数据岂不是跟着被销毁了&#x…

【攻防世界-misc】CatCatCat

1.下载附件并解压至桌面&#xff0c; 包含一张图片&#xff0c;一个txt文件&#xff0c;将图片复制到kali桌面上&#xff0c;使用strings命令查看该图片内容是否包含flag字符&#xff0c;得到的内容是密码为&#xff1a;catflag 在查看txt文件时&#xff0c;可以看到在文件名命…

Matlab通信仿真系列——随机信号分析

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、平稳随机过程 1、相…

el-select实现分屏效果

动态绑定class值 &#xff0c;多种判断 :class"type 8 ? home-stye-2 : type 24 ? home-stye-1 : home-stye-3" <div class"home-right-top"><div class"home-right-top-video"><el-row :gutter"20"><el-c…

SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel | 京东云技术团队

前言&#xff1a;作者查阅了Sentinel官网、51CTO、CSDN、码农家园、博客园等很多技术文章都没有很准确的springmvc集成Sentinel的示例&#xff0c;因此整理了本文&#xff0c;主要介绍SpringMvc集成Sentinel SpringMvc集成Sentinel 一、Sentinel 介绍 随着微服务的流行&…

docker和docker-compose生产的容器,不在同一个网段,解决方式

在实际项目中&#xff0c;使用docker run xxXx 和docker-compose up -d 不在同一个网段&#xff0c;一个是默认是172.17.x.x, 另一个是172.19.x.x。为解决这个问题需要自定义一个网络&#xff0c;我命名为“my-bridge” 首先熟悉几条命令&#xff1a; docker network ls 或…

UG\NX二次开发 创建对象属性UF_ATTR_set_user_attribute

文章作者:里海 来源网站:里海NX二次开发3000例专栏 简介 创建对象属性UF_ATTR_set_user_attribute,这是一个新函数用于替代UF_ATTR_assign,旧版本NX是用UF_ATTR_assign函数创建、更新属性值,请参照这篇文章《UG\NX二次开发 创建对象属性UF_ATTR_assign》 下面是这个新函数…

什么是requestIdleCallback?和requestAnimationFrame有什么区别?

什么是requestIdleCallback? 我们都知道React 16实现了新的调度策略(Fiber), 新的调度策略提到的异步、可中断&#xff0c;其实就是基于浏览器的 requestIdleCallback和requestAnimationFrame两个API。 在 JavaScript 中&#xff0c;requestIdleCallback 是一个用于执行回调函…

算法通关第十七关黄金挑战——透析跳跃问题

大家好&#xff0c;我是怒码少年小码。 本篇是贪心思想的跳跃问题专题&#xff0c;跳跃问题出现的频率很高。 跳跃游戏 LeetCode 55&#xff1a;给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。 …

【数据结构】——排序

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【网络奇遇之旅】:那年我与计算机网络的初相遇

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 计算机网络 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 一. 前言二. 计算机网络的定义三. 计算机网络的功能3.1 资源共享3.2 通信功能3.3 其他功能 四. 计算机网络…

Mysql 递归查询子类Id的所有父类Id

文章目录 问题描述先看结果表结构展示实现递归查询集合查询结果修复数据 问题描述 最近开发过程中遇到一个问题,每次添加代理关系都要去递归查询一下它在不在这个代理关系树上.很麻烦也很浪费资源.想着把代理关系的父类全部存起来 先看结果 表结构展示 表名(t_agent_user_rela…

如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 技术细节 目录 Appuploader 常见错误及解决方法 苹果APP安装包ipa如何安装在手机上&#xff1f;很多人不知道怎么把ipa文件安装到手机上&#xff0c;这里就整理了苹果APP安装到iOS设备上的方式&#xff0c;仅供参考 苹…