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 - 下篇
1. 背景 本文承接上文,来继续说说 IOC 和 AOP 的仿写.在上文中,我实现了一个很简单的 IOC 和 AOP 容器.上文实现的 IOC 和 AOP 功能很单一,且 IOC 和 AOP 两个模块 ...
- 自己动手实现的 Spring IOC 和 AOP - 上篇
1. 背景 我在大四实习的时候开始接触 J2EE 方面的开发工作,也是在同时期接触并学习 Spring 框架,到现在也有快有两年的时间了.不过之前没有仿写过 Spring IOC 和 AOP,只是宏观 ...
- Spring IoC 和 AOP
Spring IoC 和 AOP spring框架java开发的行业标准. spring全家桶. Web:Spring Web MVC/Spring MVC,Spring Web Flux 持久层:S ...
- 【Spring 源码阅读】Spring IoC、AOP 原理小总结
Spring IoC.AOP 原理小总结 前言 版本约定 正文 Spring BeanFactory 容器初始化过程 IoC 的过程 bean 完整的创建流程如下 AOP 的过程 Annotation ...
- 浅谈 Spring IOC和AOP
浅谈 Spring IOC和AOP IOC 控制反转 以前创建对象的主动权和时机是由于自己把握的,现在将这种权利转移到Spring容器中,并且根据配置文件去创建对象管理对象 ioc的注入方式有三种:构 ...
- BeanPostProcessor —— 连接Spring IOC和AOP的桥梁
之前都是从大Boss的视角,来介绍Spring,比如IOC.AOP. 今天换个视角,从一个小喽啰出发,来加深对Spring的理解. 这个小喽啰就是, BeanPostProcessor (下面简称 B ...
- Spring IOC 和 AOP 概览
IOC(控制反转) IoC(Inversion of Control,控制倒转).所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系. 在没有IOC时,我们 ...
- spring - ioc和aop
1.程序中为什么会用到spring的ioc和aop 2.什么是IOC,AOP,以及使用它们的好处,即详细回答了第一个问题 3.原理 关于1: a:我们平常使用对象的时候,一般都是直接使用关键字类new ...
- 再品Spring Ioc 和 Aop
文章目录 Spring好处 IOC 基于XML和基于注解开发 基于XML开发 基于注解开发 配置类 扫包+注解 依赖注入 AOP 写在前面,这篇文章写的时候我的SSM已经学过一遍了,回头来看真的受益匪 ...
- 吊打面试官系列之--吃透Spring ioc 和 aop (中)
目录 Spring SpringBean的五个作用域 SpringBean的生命周期 创建过程 销毁过程 AOP的介绍和使用 AOP的介绍 AOP的三种织入方式 操作讲解 AOP的主要名词概念 Adv ...
最新文章
- 整理了 25 个 Pandas 实用技巧,拿走不谢!
- CVPR 2021 | 基于跨任务场景结构知识迁移的单张深度图像超分辨率方法
- hash地址_一致性Hash在负载均衡中的应用
- 简易航空订票系统_四川航空APP全新升级改版,三大亮点提升订票体验
- java tostring格式化日期_java日期格式化SimpleDateFormat的使用详解
- android学习笔记48——SQLite
- 推荐召回体系化建设与排序优化实践
- python进阶04IO的同步异步,阻塞非阻塞
- 《统计学习方法》—— 逻辑斯谛回归 与 最大熵模型 的介绍以及详细推导
- 1.Prometheus 监控技术与实践 --- 云计算时代的监控系统
- Java中使用各种方式实现网页跳转
- pymysql.err.OperationalError: 1136, Column count doesn t match value count at row 1
- 直播源批量生成小工具.c
- c语言怎么学自学,初学者如何学习c语言,带你玩转C语言
- 11年的macbook还能用吗_8年老本的第二春:2011款Macbook Pro换血记
- acedGrRead用法
- 做网站开发设计注意字体是否侵权
- ffmpeg下载m3u8工具大全
- 构建SpringBoot应用Docker镜像
- 51单片机超声波测距带语音播报(源程序+原理图+原理图讲解)