最新要闻
- 全球焦点!魅族20系列价格公布:2999元起、无界顶配8499元!
- 当前头条:Epic要免费送大作《消逝的光芒》增强版了:立省百元!网友:E宝YYDS
- 香蕉、蜂蜜治疗便秘?又骗我好多年
- 当前热议!俄妹COS《生化危机1》吉尔 战斗服难掩好身材
- 热议:流畅、稳定全面进化:魅族Flyme 10正式发布
- 天天资讯:17999元 ROG新款XG Mobile显卡坞上架:175W移动版RTX 4090
- 天天看点:魅族Flyme Auto车机系统正式发布:交互完全不输华为问界
- 世界观点:满血标准版48个月不卡!魅族20发布:2999元起
- 每日观点:3999元起 魅族20 PRO发布:魅族史上最高标准旗舰
- 全球新资讯:李强会见博鳌亚洲论坛理事会成员
- 当前焦点!一款在我国卖不好的手机:真实销量把苹果都拉下马了
- 非洲再现致命性疾病:出现症状24小时内死亡
- 每日看点!魅族20 INFINITY无界版由京东方供屏:采用四边等窄设计
- 最新:元气森林官方发车:0糖0脂气泡水+燃茶多口味饮料混合囤货 2.8元/瓶新低
- 煤油心目中的魅族王者归来 三年回到国内中高端市场TOP5
- 环球快资讯:游戏行业也衰退?EA拟裁员6%减少办公空间
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前视点!Spring AOP官方文档学习笔记(一)之AOP概述
1.AOP简介
(1) Spring的关键组件之一就是AOP框架,它是对Spring IoC的补充(这意味着如果我们的IOC容器不需要AOP的话就不用引入AOP),此外,AOP亦是对OOP的补充,OOP的关注点在于类,而AOP的关注点在于切面,它可以将分散在不同类不同方法中重复的代码逻辑抽取出来,称之为通知(Advice),然后在运行时通过动态代理技术将“通知”组合进原有对象中,这样就能在实现原有预期效果的情况下达到减少代码冗余的目的
(资料图片)
(2) 在Spring中,AOP主要用于两大方面,一是提供了声明式服务(比如声明式事物管理:@Transactional注解),二是让用户实现自定义切面,实现代码解偶,用于作为OOP的补充,一个简单的例子如下
//我们想在ExampleA中的每个方法中记录该方法的开始执行时间和结束执行时间@Componentpublic class ExampleA { //在每个方法业务代码执行前和执行后,都有一个System.out.println用于打印执行时间 public void register() { System.out.println(System.currentTimeMillis() + " 开始执行..."); //注册相关的业务逻辑代码... try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(System.currentTimeMillis() + " 结束执行..."); } public void sendEmail() { System.out.println(System.currentTimeMillis() + " 开始执行..."); //发送邮件相关的业务逻辑代码... try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(System.currentTimeMillis() + " 结束执行..."); }}//现在,我们期望把"记录该方法的开始执行时间和结束执行时间"这一段代码逻辑提取出来,这样,之后再往ExampleA中添加了新的方法后,我们就不需要再手动添加两个 System.out.println 语句了,而被提取的这一段代码逻辑,被称之为通知(Advice),而通知加上要被增强的业务代码(比如ExampleA中的注册,发送邮件相关的业务逻辑代码)就形成了一个切面//使用@Aspect注解定义切面类,用于声明定义一个个切面,你可能会疑惑为啥这个注解是由org.aspectj.aspectjrt提供的,那是因为虽然名字叫Spring AOP,给人的感觉好像是Spring单独开发的,但其实是Spring整合了AspectJ AOP框架(用AspectJ AOP的写法和定义方式,底层由Spring封装实现)一同实现的这个AOP功能@Aspect@Componentpublic class Logger { //1.重复的代码逻辑(System.out.println),即通知的提取:对应(3)和(5),用于记录方法的开始执行时间和结束执行时间 //2.指出要被增强的业务代码:假如有两个类ExampleA和ExampleB,我们需要记录ExampleA中每个方法的开始执行时间和结束执行时间,而ExampleB类不用,这就是(1)所发挥的作用 //3.执行要被增强的业务代码:仅仅指出要被增强的业务代码有哪些还不行,我们还需要调用这些业务代码,从而使它真正的被执行,这是(2)和(4)发挥的作用,(2)中的joinPoint称之为切入点,我们可以将它视为要被增强的业务代码(register,sendEmail)的抽象,而(4)joinPoint.proceed() 就代表着业务代码的执行,如同 thread.start() 代表着线程执行一样 //4.将通知和被增强的业务代码整个组合起来,称之为切面,即下面的recordTime方法,它就代表一个切面 @Around("execution(public * cn.example.spring.boke.ExampleA.*(..))") //(1) public void recordTime(ProceedingJoinPoint joinPoint) throws Throwable { //(2) System.out.println(System.currentTimeMillis() + " 开始执行..."); //(3) joinPoint.proceed(); //(4) System.out.println(System.currentTimeMillis() + " 结束执行..."); //(5) }}//之后,使用@EnableAspectJAutoProxy开启注解AOP功能@Configuration@EnableAspectJAutoProxy@ComponentScan("cn.example.spring.boke")public class Config {}//然后我们就可以去掉ExampleA的方法中的开始和结束时执行时间打印,因为我们已经把它们抽象提取出来了@Componentpublic class ExampleA { public void register() { //注册相关的业务逻辑代码... try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } public void sendEmail() { //发送邮件相关的业务逻辑代码... try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } }}//启动容器,执行register和sendEmail方法,可以看见我们的执行时间日志打印了出来,之后添加进ExampleA类中的新方法,也都会进行时间的打印,而无需我们手动的添加两个System.out.println语句,这便是AOP的强大功能ConfigurableApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);ctx.getBean(ExampleA.class).register();ctx.getBean(ExampleA.class).sendEmail();
2.AOP术语
(1) Aspect:切面 = 通知 + 切入点,如我们例子中所示的recordTime方法
(2) Join point:连接点,可以理解为类中的一个一个方法
(3) Advice:通知,即某个切面要在某个切入点上所要采取的行动,通常而言就是各个类各个方法中重复逻辑的抽象,比如上面这个例子中开始ExampleA中的2个方法中都有开始和结束时间打印,它们是重复的逻辑,因此我们可将它提取出来,称之为通知
(4) Pointcut:切入点,会被增强的连接点,比如上面的例子中我们对ExampleA中的方法register和sendEmail进行了增强,那么这些被增强的方法就有了一个新的称谓,即切入点,而其它的类中的方法没有被增强,还是一个个普通的方法,而这些普通的方法称之为连接点
(5) Introduction:引介,它的概念同通知差不多,只不过通知是针对切入点所提供的增强的逻辑,而引介是针对Class类,它可以在不修改原有类的代码的前提下,在运行期为原始类动态添加新的属性/方法
(6) Target object:目标对象,即会被增强的方法所属的对象,如上面例子中的ExampleA对象
(7) AOP proxy:AOP代理对象,是在目标对象上被增强了过后所产生的新对象,Spring采用动态代理技术来实现AOP,底层实现为JDK动态代理或CGLIB动态代理
(8) Weaving:织入,它代表一个动作,即将Advice组合进Target object中,从而产生AOP proxy这么的一个过程
3.AOP通知类型
(1) 根据通知与切入点的执行关系,Spring提供了5种通知类型,如下:
Before advice:前置通知,即通知在切入点执行之前执行
After returning advice:返回通知,即通知在切入点"正常"执行之后执行
After throwing advice:异常通知,即通知在切入点触发异常之后执行
After (finally) advice:后置通知,即无论切入点以何种方式执行(正常或异常),通知都会执行
Around advice:环绕通知,既可以在切入点之前执行通知,又可以在切入点之后执行,甚至可以不用执行切入点,它是最为强大的通知,我们上面例子中的recordTime就使用的是环绕通知
注意:After returning advice与After throwing advice两者是互斥的,因为如果方法调用成功无异常,则会有返回值;如果方法抛出了异常,则不会有返回值,因此这两个通知只会有一个执行
(2) Spring建议能使用具体的通知就去使用具体的通知,比如能用Before advice的情况下就不用去使用Around advice
4.Spring AOP特征
(1) Spring AOP是基于纯java实现的,不需要特殊的编译过程也不需要去控制类加载器的层次结构
(2) Spring AOP目前的切入点类型只能是方法,不能是变量或其它的类型,如果我们想要切入变量,可以使用AspectJ AOP框架,Spring与AspectJ无缝集成
(3) Spring AOP与IOC容器紧密集成,如果我们只是想要单独使用一个AOP框架,那么可以使用AspectJ
(4) Spring AOP支持基于注解的配置,也支持基于xml文件的配置,同IOC一样
(5) Spring AOP默认使用jdk动态代理,因此只要一个类实现了某个接口,那么它就能被代理,但如果我们的某个类没有实现接口,则会采用cglib动态代理来生成代理对象,同时我们也可以强制使用cglib动态代理作为默认选项
关键词:
-
当前视点!Spring AOP官方文档学习笔记(一)之AOP概述
1 AOP简介(1)Spring的关键组件之一就是AOP框架,它是对SpringIoC的补充(这意味着如果我们的IOC容器不...
来源: 关注:01、关于满减优惠券可叠加使用场景下的动态规划算法
当前视点!Spring AOP官方文档学习笔记(一)之AOP概述
全球焦点!魅族20系列价格公布:2999元起、无界顶配8499元!
当前头条:Epic要免费送大作《消逝的光芒》增强版了:立省百元!网友:E宝YYDS
香蕉、蜂蜜治疗便秘?又骗我好多年
当前热议!俄妹COS《生化危机1》吉尔 战斗服难掩好身材
今头条!【kafka】-生产环境问题-报错Maximum application poll interval
热议:流畅、稳定全面进化:魅族Flyme 10正式发布
天天资讯:17999元 ROG新款XG Mobile显卡坞上架:175W移动版RTX 4090
天天看点:魅族Flyme Auto车机系统正式发布:交互完全不输华为问界
世界观点:满血标准版48个月不卡!魅族20发布:2999元起
每日观点:3999元起 魅族20 PRO发布:魅族史上最高标准旗舰
环球热资讯!React Router 备忘清单_开发速查表分享
每日观点:希尔排序
环球微动态丨强网杯2022 GameMaster
环球视讯!128只债券推迟或取消发行
全球新资讯:李强会见博鳌亚洲论坛理事会成员
当前焦点!一款在我国卖不好的手机:真实销量把苹果都拉下马了
非洲再现致命性疾病:出现症状24小时内死亡
每日看点!魅族20 INFINITY无界版由京东方供屏:采用四边等窄设计
最新:元气森林官方发车:0糖0脂气泡水+燃茶多口味饮料混合囤货 2.8元/瓶新低
煤油心目中的魅族王者归来 三年回到国内中高端市场TOP5
环球快资讯:游戏行业也衰退?EA拟裁员6%减少办公空间
环球观焦点:张译《他是谁》豆瓣评分两天再降0.2:刑侦局你给我讲爱情?
一箭四星!中国金牌火箭长二丁火箭又一次成功:31年来超高可靠性
环球热讯:距《你的名字》仅一步之遥:新海诚《铃芽之旅》票房破4亿
山东高速股东户数下降2.82%,户均持股74.45万元
用户吐槽下载视频会员到期不能看 客服:需重新开通会员
天天快资讯:官方认证“全国美食地图”来了:快看看你家乡上榜没
【播资讯】业界首创!台铃发布水冷氢能两轮车:备用氢罐随身带 续航无压力
中科院联合研发技术!小米米家全效空气净化器明天开售:首发3699元
环球速递!苹果WWDC大会定档!iOS 17将至 看看你的iPhone还能不能升
【世界新要闻】NEXON新作TPS《幕后高手》开启不限量最终测试
使用pinctrl和gpio子系统开发GPIO驱动正点原子IMX6ULL阿尔法板的LED灯
Topaz Video AI V3.1.10 视频降噪升画质工具 安装教程(windows/macos版)
热讯:DBSAT脚本快速收集方法
实战SQL优化(以MySQL深分页为例)
世界看热讯:如何限制进程内存:cgroup
时讯:每日机构分析:3月30日
世界播报:空调安装莫任性,城管上门解民忧
博主揭秘成都夜市“鬼秤”套路:10家有8家不准!官方已开展调查
每日讯息!车企回应试驾翻车后 新款坦克500正常上市:33.50万起买高安全硬派越野
索尼PS VR2销量滑铁卢:首周仅有不足30万
天天热文:拒绝山寨卡、翻新卡!NVIDIA联合七彩虹等厂商重拳出击
每日聚焦:CloudQuery 社区版重启 | 我们做了哪些准备?
世界播报:GraphPad Prism 9 V9.5.1 破解版安装教程
世界讯息:python中类成员修饰符
因为一篇文章,这国将召见俄大使
全球最新:改革举措加快推出 “首次”“首单”不断涌现——金融部门努力提升金融服务实体经济能力
【时快讯】抖音发布公告:“剧情演绎”类视频需注明 否则最严无限期封禁
全球热点评!怀念原版《RE4》艾什莉 玩家们绘制老鼠艾什莉同人图
世界简讯:单休女生30小时往返1300公里游6景点:第二天还要上班
速讯:上海交大教授李峰:医生没有创造力 非常容易被AI替代
澳大利亚多地暴雨洪灾 泳池频现剧毒漏斗蜘蛛:最快15分钟致死
当前头条:目标规模超30亿,浙江衢州拟设一支产业基金
天天最资讯丨04735-数据库系统原理知识点
【快播报】【验证码逆向专栏】极验三代、四代点选类验证码逆向分析
Linux 服务器大量的 log 日志,如何正确看日志快速定位错误?你必须学会!
天天最资讯丨APS系统设计经验分享(时间推导 - 2023.03)
每日动态!一个诡异的Python小问题
全球球精选!科创板收盘播报:科创50指数涨0.33% 半导体股延续强势表现
每日消息!男子伪装外卖小哥偷餐 被店员一眼识破:破绽太多
天天微速讯:露营倒闭潮来袭?网友:准备工作繁琐 参加一次就够了
国产本田幼兽来了!本田Cross Cub 110上市:只需1.3万
【焦点热闻】集吸拖洗一体全能!追觅M13 Beta洗地机图赏
汇源生产:哪吒捏爆果汁3.5元/斤大促(商超11元)
当前简讯:遏制“舌尖上的浪费” 餐饮企业应当好“排头兵”
快资讯丨【0基础学爬虫】爬虫基础之网页解析库的使用
世界今日报丨Qt商业级无边框窗口实现源码(windows、msvc)
今日视点:TypeScript 学习笔记 — 类型推断和类型保护(十一)
1个月发了4版驱动 Intel Arc显卡自信起来了:RTX 3060性价比已不能看
当前最新:索尼A7R5更新Ver.2.00固件:四大升级
速读:人工智能大潮下:Meta高管仍坚称元宇宙才是未来
每日快报!库克到访米哈游与大伟哥合影 大赞《原神》及创作团队
全球热讯:马斯克请愿叫停GPT-5!360周鸿祎:不发展才是最大的不安全
前沿资讯!打通为民服务“最后一米”,浦东这个街道积极推进社会治理与公共服务全覆盖
今日热闻!RegEX 备忘清单_开发速查表分享
全球视讯!Python常见面试题014.请说出下面的代码返回结果是什么?
世界今热点:基础篇丨链路追踪(Tracing)其实很简单
天天播报:什么是横向扩展「Scale-out」和纵向扩展「Scale-up」?
焦点信息:易基因: m6A RNA甲基化研究的前期探索性实验思路|干货系列
【环球热闻】全球男性精子量告急:50年来减少62%!2045年人类绝育?
nba2k13怎么空接?nba2k13阵容名单
iu14D2N.tmp是什么意思?iu14D2N.tmp文件详情介绍
华硕f83cr笔记本是哪一年上市的?华硕f83cr笔记本配置
英雄联盟为什么进不去比尔吉沃特?比尔吉沃特服务器在哪个城市?
微信8.0的状态能维持多久?微信8.0更新了什么功能?
支付宝招财宝如何样?招财宝收益高吗?
IM跨平台技术学习(七):得物基于Electron开发客服IM桌面端的技术实践
世界今日讯!min 与 + 运算转换成类似于矩阵乘法的推导过程
【环球时快讯】HDFS Balancer负载均衡器
每日观察!【Visual Leak Detector】配置项 SkipCrtStartupLeaks
世界快消息!掌握这几个算法题.NET初级面试算法不发愁
观热点:《最后生还者》 印象派杰作
焦点快报!vivo X Fold2真机亮相:经典华夏红配色、“天圆地方”设计
全球今头条!女生爬完泰山发现裤子变成偏大码引热议:网友质疑几乎不可能
焦点热议:专家:中国汽车产业进入淘汰赛 将从百家变成十几家
资讯推荐:北京出台新政引导光伏发电高质量发展
天天即时看!火山引擎 DataTester 推出可视化数据集成方案
速读:全网最详细中英文ChatGPT-GPT-4示例文档-个性化角色智能对话从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/c