【Spring】谈谈你对IOC和AOP理解(2023最新)

news2024/11/15 13:31:42

目录

  • 一.IOC(Inversion of Control)
    • 1.IOC是什么?
    • 2.IOC的实现原理
  • 二.AOP(Aspect Oriented Programming)
    • 1.AOP是什么?
    • 2.AOP的实现原理
    • 3.说一下AOP都有哪些基本理念?或者是AOP的术语
    • 4.Advice(通知)的类型有哪些
    • 5.AOP的应用场景
    • 6.使用AOP实例(日志举例)

一.IOC(Inversion of Control)

1.IOC是什么?

控制反转,将创建对象进行反转,因为正常都是程序员去创建对象,现在使用spring容器去创建,根据需求自动去创建对象。
对象实例化,通过spring容器进行创建和管理,spring通过DI(数据注入)实现IOC。

2.IOC的实现原理

实现原理是工厂模式加反射机制。

二.AOP(Aspect Oriented Programming)

1.AOP是什么?

AOP也是以IOC为基础,面向切面编程,抽象化的面向对象,面向对象的补充和完善。面向对象就是把事务的特性和行为抽象为一个对象,比如:people类都有身高、年龄、体重等属性,也有吃饭、睡觉等行为。这些属性和行为封装成一个类。面向切面就像people类有自己的属性和行为,但是有一小部分人要去篮球场练习两年半,不是所有人都需要去练习篮球。那么AOP就把练习篮球的业务逻辑抽离出来,然后动态切入方法中,减少代码重复和解耦。简单来说:做到核心业务和非核心业务的耦合。

什么叫切面呢,下面我用图来解释一下,把多个方法都要做的操作,抽取出来。
在这里插入图片描述

2.AOP的实现原理

AOP的实现原理是JDK动态代理, 代理模式是指给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理对象提供与真实对象相同的接口,以便代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作。
注意: 也可以使用CGLIB代理,基于类,JDK动态代理,基于接口。

3.说一下AOP都有哪些基本理念?或者是AOP的术语

  • 目标对象(target)
    需要被代理的类。
  • 连接点(JoinPoint)
    程序执行的某一个点,比如某个方法。
  • Aspect(切面)
    通常是一个类,里面定义Pointcut(切入点)和 Advice(通知)。
  • Pointcut(切入点)
    用来指定需要将Advice(通知)使用到哪些地方。
  • Advice(通知)
    所要增强或增加的功能。
  • weave(织入)
    把切面应用到目标对象并创建新的代理对象的过程.
  • introduction(引入)
    在不修改代码的前提下,引入可以在运行期为类动态地增加一些方法或字段。

4.Advice(通知)的类型有哪些

①前置通知(Before Advice): 在目标方法执行之前执行。
②后置通知(After Advice): 在目标方法执行之后执行 。
③环绕通知(Around): 在目标方法调用前后均可执行自定义逻辑。
④返回通知(After returning advice): 在目标方法返回结果之后执行。
⑤异常通知(After throwing advice): 异常通知, 在方法抛出异常之后。

5.AOP的应用场景

(1) 日志记录
(2) 事务
(3) 权限管理
(4) 缓存
(5) 懒加载
(6) 内容传递
(7) 错误处理
(8) 调试
(9) 性能优化
(10) 持久化
(11) 资源池
(12) 同步
(13) 记录跟踪 优化 校准

6.使用AOP实例(日志举例)

AOP实现日志记录(注解形式)

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

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

相关文章

jvisualvm远程监控Java程序

启用远程监控: 方式一:启动参数进行配置 启动远程应用需指定jmx相关配置 java -jar -Djava.rmi.server.hostname远程服务ip -Dcom.sun.management.jmxremote.port18888 -Dcom.sun.management.jmxremotetrue -Dcom.sun.management.jmxremote.sslfa…

运动耳机推荐、最值得入手的运动耳机清单共享

现在市面上各式各样的运动蓝牙耳机着实让人挑花了眼,怎样才能从纷繁复杂的市场中挑选出专业性、安全性、舒适性等各个方面都做地可圈可点的运动蓝牙耳机可真不是一件易事啊,甚至连不少老朋友都会踩坑,为了能让大家挑到真正的运动蓝牙耳机,为此…

Dev C++ 调试功能详细总结

原文链接: Dev C 调试功能详细总结https://mp.weixin.qq.com/s/H9VwLNcJ0tY3j3265R0_7Q 大家好,我是CodeAllen(康哥),今天是2023年2月25日,继上一篇介绍了我在Windows端经常用来验证代码的工具Dev C的基本…

pytest测试框架——pytest.ini用法

这里写目录标题一、pytest用法总结二、pytest.ini是什么三、改变运行规则pytest.inicheck_demo.py执行测试用例四、添加默认参数五、指定执行目录六、日志配置七、pytest插件分类八、pytest常用插件九、改变测试用例的执行顺序十、pytest并行与分布式执行十一、pytest内置插件h…

【经典蓝牙】蓝牙AVRCP协议分析

协议简介 蓝牙AVRCP协议是蓝牙设备之间音视频的控制协议。定义了音频/视频的控制、浏览、查询、通知等一系列的命令集。常用来蓝牙耳机对手机的音乐进行控制,以及获取手机的音乐信息等场景。AVRCP协议有两个角色,分别是controller(CT&#x…

MFC 使用GridCtrl表格控件

1、以前使用GridCtrl大多作为静态库,但是程序使用的时候体积会很大,有网友询问能不能封装为动态库使用,刚好最近抽空仔细看了一下,封装出来。 2、具体封装过程不再赘述,具体测试如下所示: CGridCtrl m_Gri…

JavaScript Window

文章目录JavaScript Window浏览器对象模型 (BOM)Window 对象Window 尺寸其他 Window 方法JavaScript Window 浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话"。 浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model (BOM))…

LeetCode100_100. 相同的树

LeetCode100_100. 相同的树 一、描述 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q […

【数据结构】手撕红黑树

目录 一、红黑树简介 1、红黑树的简介 2、红黑树的性质 二、红黑树的插入(看叔叔的颜色就行) 1、为什么新插入的节点必须给红色? 2、插入红色节点后,判定红黑树性质是否被破坏 2.1情况一:uncle存在且为红 2.2情…

微信商城小程序怎么做_分享实体店做微信商城小程序制作步骤

各行各业都在用微商城小程序开店,不管是餐饮店还是便利店,还是五金店。都是可以利用微信小程序开一个线上店铺。实现线上跟线下店铺更加全面的结合。维护好自己的老客户。让您的客户给您拉新,带来新客户。小程序经过这几年的快速发展和不断升…

【量化回测必看!】Backtrader保姆级教学+免费行情源 框架介绍

前言 想开始量化学习不知道如何入手?市面上的学习资料太多不知道该怎么看? 博主将从零基础讲解回测框架,一步步完成量化数据源的搭建,让你10天内成为量化高手 博主同时将视频课程内容在B站更新,可以关注“量化NPC”获…

学习 Python 之 Pygame 开发魂斗罗(五)

学习 Python 之 Pygame 开发魂斗罗(五)继续编写魂斗罗1. 加载地图2. 修改角色尺寸和地面高度继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗(四)中,我们完成了角色的移动和跳跃还有射击,由…

Redis源码---整体架构

目录 前言 Redis目录结构 前言 deps目录 src 目录 tests 目录 utils 目录 重要的配置文件 Redis 功能模块与源码对应 前言 服务器实例 数据库数据类型与操作 高可靠性和高可扩展性 辅助功能 前言 以先面后点的方法推进无特殊说明,都是基于 Redis 5.0.…

AI Codec,视频模板技术,高效视频处理,RTC+AI,感知编码,CV-CUDA,窄带高清AI...

AI Codec,NPU硬件加速Topic《基于AI和NPU的Codec变革》孔德辉 中兴微电子 多媒体技术总监伴随通信容量(包括5G以及千兆有线网络)的发展,高带宽为更多用户接入超高清视频提供了可能。但是随着用户数量的增加,高质量的压…

排序基础之选择排序法

目录 前言 一、什么是选择排序 二、实现选择排序 三、使用泛型扩展 四、使用自定义类型测试 前言 今天天气不错,这么好的天气不干点啥实在是有点可惜了,于是乎,拿出键盘撸一把! 来,今天来学习一下排序算法中的选…

港科夜闻|全国政协副主席梁振英先生率香港媒体高管团到访香港科大(广州)...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、全国政协副主席梁振英先生率香港媒体高管团到访香港科大(广州)。2月21日下午,在全国政协副主席、广州南沙粤港合作咨询委员会顾问梁振英先生的带领下,香港20余家媒体的高管及知名媒体人士到访香港科大…

电脑技巧:分享8个Win11系统必备小技巧

目录 1、让任务栏显示“右键菜单” 2、任务栏置顶 3、还原经典右键菜单 4、Win11版任务管理器 5、新版AltTab 6、开始菜单不再卡 7、为Edge浏览器添加云母效果 8、自动切换日/夜模式 Win11在很多地方都做了调整,但由于涉及到诸多旧有习惯,再加上…

SRE中 的SLO,SLI等知识 归纳

SLA Service Level Agreement 服务质量/水平协议SLO Service Level Objective 服务质量/水平目标SLI Services Level Indicator 服务质量/水平指标下面用人、事、物的逻辑进行阐释。人和事用从上到下,从左到右的顺序。客户 - 每 1 个客户在使用产品服务时&…

gin 框架初始教程

一 、gin 入门1. 安装gin :下载并安装 gin包:$ go get -u github.com/gin-gonic/gin2. 将 gin 引入到代码中:import "github.com/gin-gonic/gin"3.初始化项目go mod init gin4.完整代码package mainimport "github.com/gin-go…

JavaSE10-循环语句(for、while、do...while)

文章目录一、for循环1.格式2.执行流程二、while循环1.格式三、do...while循环1.格式四、循环控制(break、continue)1.break2.continue五、案例1.请输出下列的形状2.打印99乘法表一、for循环 1.格式 初始化语句只有在最开始的时候执行了一次如果第一次进行条件判断的时候结果为…