Spring:IOC和AOP
Spring:IOC和AOP
- 一. IOC
- (1) 引入
- (2) 定义
- (3) 作用
- (4) 实现
- (5) DI依赖注入
- 二. AOP
- (1) 概念
- (2) Spring中的AOP
- (3) 入门案例
- 0. 准备:
- 1. 定义通知类和通知方法;
- 2. 在通知类中描述和定义切入点 @pointcut
- 3. 用注释绑定切入点和通知方法
- 4. 通知类:@Component + @Aspect
- 5. SpringConfig:@EnableAspectJAuotoProxy
- (4) AOP的运行流程
- (5) AOP案例:测量业务层接口万次执行效率
IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,可以很好地实现解耦合。
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
一. IOC
(1) 引入
如以前都是在【业务层】实例化【持久层】对象,耦合性强!
当持久层代码变动时,业务层代码也要改变! 所以有了IOC控制反转,即由IOC容器将持久层的对象注入到业务层;
(2) 定义
控制反转即主动变成被动;
IOC控制反转,即 主动new对象
变成由于 外部(IOC容器)去提供对象
,被IOC容器所管理的对象也被称为 bean
;
(3) 作用
解耦合,如果dao层有变化,则不需要改变service层代码!
(4) 实现
Spring技术对IOC思想进行了实现:
Spring提供了Core Container容器,称为IOC容器
,用来充当IOC思想中的外部;
即在Spring中,IOC可以理解为由主动new对象,转换为由IOC容器提供对象;
IOC会管理大量的对象(用到了 反射机制
,根据路径名获取类文件,进而完成对象创建,创建对象调用的是无参构造
);
IOC会管理对象的创建和初始化的过程;
IOC容器负责对象的创建、初始化等一些列工作,被创建或管理的对象在IOC容器中统称为
Bean
;
(5) DI依赖注入
在容器中建立Bean与Bean之间的依赖关系的过程,称为依赖注入!
Spring通过DI(依赖注入)实现IOC(控制反转);
效果:在需要使用Service对象时,里面的dao对象就已经由IOC容器生成并注入了!
目标:充分解耦;
总结:
- IOC :用对象的时候不用程序去new,而是由IOC容器提供;
- DI:当IOC中的Bean有关系时,会绑定依赖;
二. AOP
(1) 概念
AOP可以说是对OOP(面向对象编程) 的补充和完善;
面向对象就是将事物的特性和行为抽象为一个对象,如people类有身高、体重、年龄等属性,也有吃饭、睡觉等行为。把这些特性和行为封装成一个类,然后可以统一调用。
AOP(面向切面编程) 就是把一个单独的业务功能抽取出来,然后动态把这个功能切入到需要的方法(或行为)中;
即将功能先定义好,需要的地方才切入,这样便于减少系统的重复代码,降低模块间的耦合度。
作用:
①降低耦合度
②不改变原有代码的基础下,增加新功能;
Spring AOP就是基于动态代理
实现的,动态代理又利用了反射机制
;
使用场景:
如果有相同的、大量使用的功能在很多地方增强,适合AOP------------即简化共性功能的开发;
(2) Spring中的AOP
Spring理念:无侵入式编程,即不改变原有代码的基础上,为其增加新的功能;(使用了动态代理
)
AOP将业务逻辑组件和切面类都加入到容器中,通过@Aspect通知注解给切面类的目标方法标注在哪运行。
连接点:所有的原始方法;
切入点Pointcut:需要被功能来增强的方法(特殊的连接点);
通知advice:即抽取出来的增强的功能;
切面:绑定通知和切入点的关系,一个通知对应一个切入点;
总结:
抽取程序中要增强的部分作为一个通知方法;
执行对应通知的方法就是切入点;
将通知和切入点绑定的就是切面,切面就是描述在哪个切入点上执行哪些通知;
(3) 入门案例
需求:不改变切入点代码的前提下,执行update()时也打印系统时间; ;
思路分析:
1.导入AOP和Aspect的坐标
2.准备连接点(原始方法)
3.制作共性功能------通知和通知类;
4.定义切入点Pointcut;
5.绑定通知方法和切入点(切面)
0. 准备:
BookDao:
BookDao实现类:
目前只有执行save()方法才会打印系统时间;
导入aop和aspect包;
aop包默认依赖于spring-context,所以只需要导aspectjweaver包;
1. 定义通知类和通知方法;
2. 在通知类中描述和定义切入点 @pointcut
用切入点表达式定义切入点,使用 @Pointcut
;
①在Execution中描述实际的切入点方法(切入点表达式):
②定义一个私有方法pt(空壳),代表切入点;
3. 用注释绑定切入点和通知方法
此处让通知方法在切入点的前面执行,用@Before
,括号中写定义的切入点的私有方法pt();
此处通知方法即打印当前时间;
此处的切入点即update()方法;
4. 通知类:@Component + @Aspect
要能让Spring控制,先用@Componet
将通知类定义为bean,
然后用@Aspect
让通知类中的东西生效,让Spring知道这是AOP;
5. SpringConfig:@EnableAspectJAuotoProxy
告诉Spring:这里用了注解开发的AOP,即去启动了@Aspect,而Aspect告诉Spring去识别通知类;
效果:执行update也会打印系统时间;
(4) AOP的运行流程
1.启动 Spring容器
2.读取 所有【切面配置】中的pointcut
切入点;
3.初始化 bean;
判定 bean对应的类(如BookDaoImpl)中的原始方法
(如update)是否匹配到【通知类中】配置的切入点
※
匹配成功,创建原始对象(即目标对象)的代理对象
;
4.获取bean执行方法;
当匹配成功,获取的bean是代理对象,则用代理对象去调用原始方法与通知方法;
(即用代理对象去调用对应的方法(update),然后走增强的通知方法的操作;)
整个AOP的实现过程是由代理模式来进行的;
总结:如果配置的切入点能和类(BookDaoImpl)的方法匹配上,那么就创建代理对象,用代理对象去调用原始方法和增强的通知方法; 否则就只创建原始对象;
(5) AOP案例:测量业务层接口万次执行效率
AOP案例:测量业务层接口万次执行效率
相关文章:
Spring:IOC和AOP
Spring:IOC和AOP一. IOC(1) 引入(2) 定义(3) 作用(4) 实现(5) DI依赖注入二. AOP(1) 概念(2) Spring中的AOP(3) 入门案例0. 准备:1. 定义通知类和通知方法;2. 在通知类中描述和定义切入点 pointcut3. 用注释绑定切入点和通知方法4. 通知类&am…...
【笔记】效率之门——Python中的函数式编程技巧
文章目录Python函数式编程1. 数据2. 推导式3. 函数式编程3.1. Lambda函数3.2. python内置函数3.3. 高阶函数4. 函数式编程的应用Python函数式编程 我的AI Studio项目:【笔记】LearnDL第三课:Python高级编程——抽象与封装 - 飞桨AI Studio (baidu.com) p…...
Java【多线程基础2】 Thread类 及其常用方法
文章目录前言一、Thread类1, 构造方法2, 常用成员属性3, 常用成员方法3.1, start 启动线程3.2, interrupt 中断线程 (重点)3.2.1, 手动设置标记位3.2.2, 使用内置标记位3.3.3, interrupt 方法 的作用3.3 sleep 休眠线程3.4, jion 等待线程3.5 获取当前线程的引用总结前言 各位读…...
JVM调优实战及常量池详解
目录 阿里巴巴Arthas详解 Arthas使用场景 Arthas使用 GC日志详解 如何分析GC日志 CMS G1...
ChatGPT研究分析:GPT-4做了什么
前脚刚研究了一轮GPT3.5,OpenAI很快就升级了GPT-4,整体表现有进一步提升。追赶一下潮流,研究研究GPT-4干了啥。本文内容全部源于对OpenAI公开的技术报告的解读,通篇以PR效果为主,实际内容不多。主要强调的工作…...
我为什么要写博客,写博客的意义是什么??
曾经何时我也不知道,怎样才能变成我自己所羡慕的大佬!!在一次次的CSDN阅读的过程中,结实了许多志同道合的人!!包过凉哥,擦姐……大佬,但是,很遗憾,与这些人只…...
ssm框架之spring:浅聊AOP
AOP(Aspect Oriented Programming),是一种设计思想。先看一下百度百科的解释: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态…...
k8s详解
一、k8s中的yaml文件 JSON格式:主要用于api接口之间信息的传递YAML格式:主要用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化 YAML格式: 大小写敏感使用缩进代表层级关系,不支持TAB制表符缩…...
计算机操作系统(第四版)第一章操作系统引论 1.1操作系统的目标和作用
第一章操作系统引论 1.1操作系统的目标和作用 什么是操作系统OS? 配置在计算机硬件上的第一层软件是对硬件的首次扩充。 是最重要的系统软件,其他系统软件应用软件都依赖于操作系统的支持。 操作系统主要作用? 管理计算机系统所有硬件设…...
git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)
项目经理远程创建了一个空项目,无任何内容,给我赋予的developer账号权限,本地改为后提交代码试了很多次都上传不上去,报错如下: ! [remote rejected] master -> master (pre-receive hook declined)先说结果&#x…...
jQuery 遍历方法总结
遍历方法有:1、add(),用于把元素添加到匹配元素的集合中;2、children(),用于返回被选元素的所有直接子元素;3、closest(),用于返回被选元素的第一个祖先元素;4、contents(),用于返回…...
OKHttp 源码解析(二)拦截器
游戏SDK架构设计之代码实现——网络框架 OKHttp 源码解析(一) OKHttp 源码解析(二)拦截器 前言 上一篇解读了OKHttp 的基本框架源码,其中 OKHttp 发送请求的核心是调用 getResponseWithInterceptorChain 构建拦截器链…...
如何修改设置浏览器内核模式
优先级: 强制锁定极速模式 >手动切换(用户)>meta指定(开发者)>浏览器兼容列表(浏览器) 需要用360安全浏览器14,chromium108内核,下载地址https://bbs.360.cn/t…...
30个Python常用小技巧
1、原地交换两个数字 1 2 3 4 x, y 10, 20 print(x, y) y, x x, y print(x, y) 10 20 20 10 2、链状比较操作符 1 2 3 n 10 print(1 < n < 20) print(1 > n < 9) True False 3、使用三元操作符来实现条件赋值 [表达式为真的返回值] if [表达式] else [表达式…...
ubuntu解决中文乱码
1、查看当前系统使用的字符编码 ~$ locale LANGen_US LANGUAGEen_US: LC_CTYPE"en_US" LC_NUMERIC"en_US" LC_TIME"en_US" LC_COLLATE"en_US" LC_MONETARY"en_US" LC_MESSAGES"en_US" LC_PAPER"en_US" …...
2022年全国职业院校技能大赛(中职组)网络安全竞赛试题——MYSQL安全测试解析(详细)
B-3任务三:MYSQL安全测试 *任务说明:仅能获取Server3的IP地址 1.利用渗透机场景kali中的工具确定MySQL的端口,将MySQL端口作为Flag值提交; 2.管理者曾在web界面登陆数据库,并执行了select <?php echo \<pre>\;system($_GET[\cmd\]); echo \</pre>\; ?…...
C++ map和unordered_map的区别
unordered_map 类模板和 map 类模板都是描述了这么一个对象:它是由 std::pair<const Key, value> 组成的可变长容器; 这个容器中每个元素存储两个对象,也就是 key - value 对。 1. unordered_map 在头文件上,引入 <unor…...
BCSP-玄子JAVA开发之JAVA数据库编程CH-04_SQL高级(二)
BCSP-玄子JAVA开发之JAVA数据库编程CH-04_SQL高级(二) 4.1 IN 4.1.1 IN 子查询 如果子查询的结果为多个值,就会导致代码报错解决方案就是使用 IN 关键字,将 替换成 IN SELECT …… FROM 表名 WHERE 字段名 IN (子查询);4.1.…...
学习java——②面向对象的三大特征
目录 面向对象的三大基本特征 封装 封装demo 继承 继承demo 多态 面向对象的三大基本特征 我们说面向对象的开发范式,其实是对现实世界的理解和抽象的方法,那么,具体如何将现实世界抽象成代码呢?这就需要运用到面向对象的三大…...
初阶数据结构 - 【单链表】
目录 前言: 1.概念 链表定义 结点结构体定义 结点的创建 2.链表的头插法 动画演示 代码实现 3.链表的尾插 动画演示 代码实现 4.链表的头删 动画演示 代码实现 5.链表的尾删 动画演示 代码实现 6.链表从中间插入结点 动画演示 代码实现 7.从单…...
第五周作业、第一次作业(1.5个小时)、练习一
一、创建servlet的过程没有太多好说的,唯一需要注意的就是:旧版本的servlet确实需要手动配置web.xml文件,但是servlet2.5以后,servlet的配置直接在Java代码中进行注解配置。我用的版本就不再需要手动去配置web.xml文件了,所以我只…...
【正点原子FPGA连载】 第三十三章基于lwip的tftp server实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
第三十三章基于lwip的tftp server实验 文件传输是网络环境中的一项基本应用,其作用是将一台电子设备中的文件传输到另一台可能相距很远的电子设备中。TFTP作为TCP/IP协议族中的一个用来在客户机与服务器之间进行文件传输的协议,常用于无盘工作站、路由器…...
蓝桥冲刺31天之316
如果生活突然向你发难 躲不过那就迎面而战 所谓无坚不摧 是能享受最好的,也能承受最坏的 大不了逢山开路,遇水搭桥 若你决定灿烂,山无遮,海无拦 A:特殊日期 问题描述 对于一个日期,我们可以计算出年份的各个…...
说一个通俗易懂的PLC工程师岗位要求
你到了一家新的单位,人家接了一套新的设备,在了解设备工艺流程之后,你就能决定用什么电气元件,至少95%以上电气原件不论你用过没用过都有把握拍板使用,剩下5%,3%你可以先买来做实验,这次不能用&…...
今年还能学java么?
“Java很卷”、“大家不要再卷Java了”,经常听到同学这样抱怨。但同时,Java的高薪也在吸引越来越多的同学。不少同学开始疑惑:既然Java这么卷,还值得我入行吗? 首先先给你吃一颗定心丸:现在选择Java依然有…...
ajax学习1
不刷新页面的情况下,向服务端发送请求,异步的js和XMLajax不是新的编程语言,只是把现有标准组合到一起使用的新方式...
一题多解-八数码(万字长文)
16 张炜皓 (ζ͡顾念̶) LV 5 1 周前 在做这道题前,先来认识一下deque双端队列 C STL 中的双端队列 题目连接 使用前需要先引入 头文件。 #include; STL 中对 deque 的定义 // clang-format off template< class T, class Allocator std::allocator class d…...
九种跨域方式实现原理(完整版)
前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容。 一、什么是跨域? 1.什么是同源策略及其限制内容? 同源策略是一种约定,它是浏览器最核心也最基本的安…...
fighting
目录Mysqlgroup by和 distinct哪个性能好java觉得Optional类怎么样isEmpty和isBlank的用法区别使用大对象时需要注意什么内存溢出和内存泄漏的区别及详解SpringResource和Autowired的起源既生“Resource”,何生“Autowired”使用Autowired时为什么Idea会曝出黄色警告…...
网络安全日志监控管理
内部安全的重要性 无论大小,每个拥有IT基础设施的组织都容易发生内部安全攻击。您的损失等同于黑客的收益:访问机密数据、滥用检索到的信息、系统崩溃,以及其他等等。专注于网络外部的入侵是明智的,但同时,内部安全也…...
网站的css文件夹/谷歌seo服务
10055 WA了两次之后好好or vice versa:反之亦然。另外,int型的最大为2^31-1(符号位)c#include <iostream> #include <stdio.h>using namespace std;#define lln long longint main() {lln a, b;lln t;while(~scanf(&q…...
网站建设及推广方案/深圳做网站的公司有哪些
首发于我的博客网站(prajna.top): http://prajna.top/doc/4/278 apk文件 apk实际上就是一个zip文件,可以直接使用zip解压,它包含 classes.dex, 资源文件,证书,动态链接库等。 classes.dex: 代码文件,包含…...
asp在网站开发中的作用/青岛seo优化
发现空间是足够的,然后df -i 查看了下inodes,发现根目录下的inodes值使用率为63%了。 查看到底哪个目录下面的文件最多,查看前30个目录最多文件即可。 find / -xdev -printf %h\n | sort | uniq -c | sort -nr -k 1 | head -30 经查…...
麻城做网站/免费刷粉网站推广免费
微信公众号“中学数学教与学”教师群公告微信QQ教师群入群方式及介绍高中数学教与学★教师QQ群【324623715】初中数学教与学★教师QQ群【460287009】中学数学教与学★学生QQ群【837494287】本文作者,David Matthews,《自然》特约作者。翻译作者ÿ…...
网站推广员如何做/什么是论坛推广
队长链接:http://www.cnblogs.com/zhanghongjian/p/7608590.html html书写规范 1. 文档类型声明及编码: 统一为html5声明类型<!DOCTYPE html>; 编码统一为<meta charset”gbk” />, 书写时利用IDE实现层次分明的缩进; 2. 非特殊情况下样式文件必须外链至…...
网站找百度做可以嘛/西安百度快照优化
博主闭关两个多月,查阅了数百万字的大数据资料,结合自身的学习和工作经历,总结了大厂高频面试题,里面涵盖几乎所有我见到的大数据面试题目。 《大厂高频面试题系列》目前已总结4篇文章,且在持续更新中✍。文中用最直白…...