为什么要用spring?什么是IOC/AOP?你真的清楚吗?

IOC和AOP的优点缺点是什么?为什么要用spring的IOC和AOP? 作为一名 Java 开发,对 Spring 框架是再熟悉不过的了。Spring 支持的控制反转(Inversion of Control,缩写为IoC)和面向切面编程(Aspect-oriented programming,缩写为AOP)早已成为我们的开发习惯,仿佛 Java 开发天生就该如此。人总是会忽略习以为常的事物,所有人都熟练使用 IoC 和 AOP,却鲜有人说得清楚到底为什么要用 IoC 和 AOP。 技术肯定是为了解决某个问题而诞生,要弄清楚为什么使用 IoC 和 AOP,就得先弄清楚不用它们 阅读详情

由于Spring家族的东西很多,一次性写完也不太现实。所以这一次先更新Spring「最核心」的知识点:AOP和IOC

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

无论是入门还是面试,理解AOP和IOC都是非常重要的。在校招的时候,我没被问过Mybatis/Hibernate/Struts2这样的框架,而Spring就经常会被问到。

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

这次的PDF共有「149」页,PDF涉及到的内容:

  • IOC和AOP的全面讲解
  • Spring事务详解和相关问题
  • SpringIOC/AOP相关面试题

为什么要用Spring

当年的我,刚学Spring的时候,会想:『这IOC和AOP』是什么鬼玩意啊?一大堆的名词「控制反转」「依赖注入」「面向切面编程」。这是在给我搞笑的吧。

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

在最开始学的IOC折腾了一大堆的玩意,结果就是在管「创建对象」的事??逗我呢???我直接new一个对象出来不香吗?

有这种想法这种明显就是「代码写得少了,想得多了」

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

我们写代码,不仅仅是要能实现功能,实现完了以后我们还得对写过的代码「维护」。如果我们的代码写得很烂,那「维护」的成本就很高。

维护实际上是做什么事?

  1. 出了问题需要找到是哪块的代码有问题
  2. 在原有的基础上加入一些新的功能(也就是所谓的迭代)

面对重复的/繁琐的非业务代码:

  1. 如果程序出了问题,我们得看吧?谁也保证不了重复的代码就没有问题。
  2. 我们要想加一个新的功能,还得按原来的方式写吧?代码量会越来越多,越来越多….

上一期的「Mybatis」教程也讲到了,我们的JDBC写得好好的,运行的效率也是杠杠的。但是JDBC需要我们「自行」处理的细节太多了,我们需要在里边添加各种「重复」的代码。

我们使用ORM框架,那么我们就可以更加「专注」去实现本身的业务,ORM框架把「重复」的代码都屏蔽掉,代码维护起来就比JDBC要方便。

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

Spring IOC 解决的是 对象管理和对象依赖的问题。

Spring AOP 解决的是 非业务代码抽取的问题。

(这里要是没基础的同学,可能看不太懂,下面再来解释解释一下应该就没问题了)

Spring IOC

提到Spring IOC,随便去网上一搜,我们就可以看到「依赖注入」「控制反转」这两个词。

很多人都会试图要把这两个词给解释清楚,但是太难了,这两个词真的是太难给解释清楚了。

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

Spring IOC 解决的是对象管理和对象依赖的问题。本来我们的对象都是new出来的,而我们如果使用Spring 则把对象交给「IOC容器」来管理。

三歪这逼搞事情了。「依赖注入」和「控制反转」都没讲,现在还来了个「IOC容器」。

「IOC容器」是什么?我们可以理解为是一个「工厂」,我们把对象都交由这个「工厂」来管理,包括对象的创建和对象之间的依赖关系等等。等我们要用到对象的时候,就从这个「工厂」里边取出来。

「控制反转」指的就是:本来是「由我们自己」new出来的对象,现在交给了IOC容器。把这个对象的「控制权」给「他方」了。「控制反转」更多的是一种思想或者说是设计模式,把原有由自己掌控的事交给「别人」来处理。

「依赖注入」更多指的是「控制反转」这个思想的实现方式:对象无需自行创建或管理它们的依赖关系,依赖关系将被「自动注入」到需要它们的对象当中去。

最简单理解「依赖注入」和「控制反转」:本来我们的对象都是「由我们自己」new出来的,现在我们把这个对象的创建权限和对象之间的依赖关系交由「IOC容器」来管理。

悄悄话:我个人本身是不太喜欢琢磨每个词的含义的,很多时候大佬们也很难解释清楚。如果是初学的同学,也不用太纠结每个名词的具体含义,深究下去也没有太大的必要。

理论上,我们可以把「IOC容器」也当做是一个「工厂」,使用IOC的好处就是:

  • 将对象集中统一管理,便于修改
  • 降低耦合度(调用方无需自己组装,也无需关心对象的实现,直接从「IOC容器」取就好了)

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

IOC 需要学什么?

我们在使用Spring的时候,首先我们要学习的就是怎么把对象交给「IOC容器管理」

Spring提供了四种方式:

  • 注解
  • XML
  • JavaConfig
  • 基于Groovy DSL配置

总的来说:我们以XML配置+注解来装配Bean比较多,其中注解这种方式占大部分。

把对象放到「IOC容器」了以后,对象与对象之间是有关系的,我们需要把对象之间的依赖告诉Spring,让它来帮我们解决掉对象的依赖关系。

「对象之间的关系」别想得太复杂了。在日常开发中其实很多时候就是A对象里边有B对象的属性而已。

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

一般来说我们会通过构造器或者属性(setting方法)的方式来注入对象的依赖

举个例子:日常开发中,我们很多时候用@Component注解标识将对象放到「IOC容器」中,用@Autowired注解将对象注入

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

下面这张图就很好总结了以各种方式来对Bean的定义和注入。

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

Spring AOP

AOP:Aspect Object Programming 「面向切面编程」,听起来是不是很牛逼。

Spring AOP主要做的事情就是:「把重复的代码抽取,在运行的时候往业务方法上动态植入“切面类代码”」

举个例子,现在我们有以下的代码:

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

上面的代码其实最核心的就一行代码:「保存user对象到数据库中」

session.save(user);

我们的数据库表肯定不止user一张表,对数据库的增删改也肯定不止add()方法一个。所以我们可以想象到:对数据库的每次操作,都要写「开启事务」和「关闭事务」这种代码。

这种代码对我们来说是重复的,于是我们会想把这种代码给「抽取」出来。

如果我们单纯用OOP(面向对象)的思想去把代码给优化掉,最终我们的效果可能是这样的:

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

即使这样看起来代码已经很少了,但我们细想一下会发现:update()/delete()方法同样也会有aop.begin()这样的重复代码的。

我们想要「消灭」掉这些重复代码,可以怎么做?这个时候我们应该能想到「动态代理」,通过动态代理,我们可以把对象「增强」,将非业务代码写在要「增强」的逻辑上。

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

完了以后,我们就可以通过「增强后的对象」去调用方法,最终屏蔽掉「重复代码」

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

效果可能会如下:

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

上面是我们手动写的代理来实现对「非业务代码」的抽取,类似这样的场景会有很多:比如我们要做权限控制,要对参数进行校验等等。

Spring 支持了AOP,让我们可以不用自己「手动」去写代理对象,达到将「非业务代码」的抽取的效果。

我们可以体验一波Spring AOP是怎么弄的,跟上面的对比对比:

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

效果如下:

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

再叨叨

建议:在学习IOC之前,可以先看看「工厂模式」。在学习AOP之前,可以先看看「代理模式」

理解了「工厂模式」那就知道为什么我们不再直接new对象,理解了「代理模式」,我们就知道Spring AOP的底层技术其实就是「动态代理」,这样学习IOC和AOP的时候,就会轻松很多。

还要一点就是不要被「名词」给吓唬了,之前不懂某个技术的时候,听别人讲一些名词,我对此完全不懂。那就可能会认为这个技术会很牛逼,其实等真正接触下来,学习完了以后,其实发现也不过如此嘛。

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

推荐阅读:23种设计模式系列之——实战工厂方法模式

最后再来给大家看下整理文档的目录(需要的转发加关注后私信“资料”免费领取)

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

为什么要用spring?什么是IOC/AOP?你真的清楚吗?

 

Spring之IOC、AOP及基本使用 Spring是轻量级的开源的JavaEE框架,可以解决企业应用开发的复杂性,有两个核心部分:IOC和Aop。 阅读详情

相关推荐

IOC和AOP整合以及面试宝典spring

在软件业,AOP为Aspect Oriented Programming的缩写,意味:面向切面编程.通过预编译方式和运行期动态代理实现程序功能的统 一维护的一种技术,AOP是OOP的延续.将一些共性的内容进行抽取,在需要用到的地方,以动态代理的方式进行插入.在不修 改源 码的基础上,还能对源码进行前后增强。属性的依赖注入,spring在通过IOC创建对象的时候,如果对象还有属性,就一并给赋值进去DI是在IOC的基础上进行对象的属性 注入。b、after: 在方法执行之后调用的通知,无论方法执行是否成功。

weixin_73683568的博客 1510

IOC和AOP

IOC,即,把对象的创建、初始化、销毁交给 Spring 来管理,而不是由开发者控制,实现控制反转。IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂(BeanFactory 接口)。IOC的原理是基于xml解析、工厂设计模式、反射实现的。。

weixin_73667562的博客 6479

ScottPlot vs LiveCharts:WPF图表库性能对比与MVVM适配方案

本文深度对比了WPF图表库ScottPlot与LiveCharts在性能与MVVM架构适配上的表现。通过十万级数据点的基准测试,ScottPlot在渲染速度与内存占用上优势显著。文章重点探讨了两种库在MVVM模式下的集成方案,为开发者根据项目需求(如实时监控或快速原型)进行技术选型提供了实战指导。

lll78的博客 245

AOP和IOC详解

在Java中,AOP(面向切面编程)和IoC(控制反转)是两种常见的设计模式,它们在现代Java应用程序中,尤其是在Spring框架中扮演着重要的角色,在软件工程中广泛应用的设计原则,特别是在企业级应用程序开发中。它们都旨在提高代码的模块化、可维护性和可扩展性。通过结合使用AOP和IoC,Spring框架提供了一种强大的方式来构建松耦合、易于测试和维护的应用程序。AOP允许开发者将业务逻辑与横切关注点分离,而IoC则简化了组件之间的依赖管理和配置。

精神小牛马 7012

FAST-LIO2实战:如何在无人机上部署并实现厘米级定位(附ROS配置全流程)

本文详细介绍了如何在无人机上部署FAST-LIO2激光雷达惯性里程计系统,以实现厘米级精确定位。内容涵盖从硬件选型(如激光雷达与机载计算机)、软件环境配置(ROS Noetic)、传感器标定,到FAST-LIO2参数调优、与PX4飞控集成以及实际飞行测试的全流程。重点解决了实时定位中的外参标定、数据同步等关键问题,为无人机在无GPS或复杂光照环境下提供稳定可靠的定位解决方案。

weixin_29062865的博客 250

搭建PX4开发系统(Ubuntu 22.04)

本文是《从零开始学 PX4 无人机开发》系列第二篇,适合开发者在 Ubuntu 系统下快速搭建 PX4 编译与仿真环境,支持 QGroundControl、Gazebo、MAVSDK 等完整工具链。

qq_15856721的博客 4201

java中ioc和aop是什么?【杭州多测师】【杭州多测师_王sir】

一、什么是IOC?1、IoC(Inversionofcontrol)就是控制反转/反转控制。它是一种思想不是一个技术实现。主要就是用来解决创建和管理对象的2、就是不需要通过new关键字来创建对象,而是通过IoC容器(Spring框架)来帮助我们实例化对象。我们需要哪个对象,直接从IoC容器里面过去即可3、可以让对象之间的耦合度和依赖程度降低4、使用IoC的思想,我们将...

多测师_王sir的博客 981

SPI扩展CAN方案:从寄存器配置到多路通信实战

本文详细介绍了SPI扩展CAN方案的实现方法,从寄存器配置到多路通信实战。通过使用MCP2517FD芯片和SPI接口,可低成本扩展多路CAN通道,适用于工业控制领域。文章涵盖硬件设计、寄存器配置、中断优化及性能调优等核心内容,帮助开发者高效解决设备节点过多的问题。

weixin_42657024的博客 362

AOP与IOC详解

AOP和IOC是现代软件开发中两个重要的概念,它们各自有着独特的原理、使用场景、使用注意事项以及优缺点。在实际开发过程中,我们应该根据具体的需求选择合适的工具和技术,并且注意合理使用,以达到最佳的效果。

weixin_55745942的博客 2917

Claude Code 100个真实案例 - 用AI搭建LangChain多工具Agent(自主搜索+查询)

本案例展示如何使用 Claude Code 搭建一个 LangChain 多工具 Agent 系统。Agent 能够自主决定调用搜索引擎、数据库查询、天气查询、计算器等工具,像人类助手一样拆解问题并逐步解决。

yueyeguzhuo的专栏 559

Python 爬虫实战:攻克小红书种草笔记,抓取美妆好物推荐数据

通过本次 Python 爬虫实战,我们成功地从小红书爬取了美妆种草笔记的数据,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分笔记的数据,且未对笔记中的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多笔记的数据,并深入分析笔记中的多媒体内容、用户行为模式等,为美妆品牌和消费者提供更有价值的数据支持。

u014481728的博客 3272

IOC (控制反转) 和 AOP (面向切面编程) 详解

IOC与AOP核心概念解析 IOC(控制反转)和AOP(面向切面编程)是Spring框架的两大核心思想。IOC通过依赖注入降低组件耦合,将对象创建和管理交给容器处理,支持构造函数、Setter和字段注入三种方式,其中构造函数注入为推荐做法。AOP则将日志、事务等横切关注点从业务逻辑中分离,通过切面(Aspect)、切入点(Pointcut)和通知(Advice)等概念实现功能增强。Spring AOP基于动态代理实现,提供@Before、@After、@Around等五种通知类型,常用于日志记录、事务管理等

weixin_47242663的博客 1905

卸载python弹框报错:Could not set file security for file ‘D:\Config.Msi\abd5.rbf‘. Error: 5. Verify...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 6487

Spring的IOC和AOP原理

Spring的IOC和AOP原理 本文讲的是面试之Spring框架IOC和AOP的实现原理, IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所。 IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。

子冉冰清的博客 2万+

第21章—技术管理篇(上):身为技术人该怎样带好团队并做好管理者

上节讲了职业规划和学习提升这两个话题,随着职业规划的不断落地,或者自己能力的不断提升,大家也会逐渐被提拔成“职级更高”的人。企业规模扩张时,员工数量也会变多,意味着Boss需要更多的人来辅助管理,而管理者会从外部招聘吗?也许会,但大多企业更喜欢从内部选拔,毕竟人的天性更希望找的人值得信赖。此时,一些能力不错、做事靠谱的老员工,就会被“赶上”管理者的位子。作管理不难,但想要“”就需要一定情商。

运维老生常谈 1366

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring IOC 和 AOP

Spring框架中的IoC(Inverse of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)是其两大核心特性,它们共同为Java应用程序带来了更高的灵活性、可维护性和松耦合度。

Good good study,day day up 2858

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring IOC/DI和AOP

一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846 1.1、IoC是什么   Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Jav...

程序小白进阶之路 6274

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring中的IOC和AOP

Spring 框架是一款轻量级的开发框架,核心思想是 IOC(控制反转)和 AOP(面向切面编程)。为 Java 应用程序开发提供组件管理服,用于组件之间的解耦,以及简化第三方JavaEE中间件技术的使用(IMS、任务调度、缓存、ORM 框架),是一个基础架构型的开发框架;。AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它允许开发者将横切关注点(如日志记录、事务管理、安全性等)从业务逻辑中分离出来。

zenbior的博客 3314

Spring:IOC和AOP

IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,可以很好地实现解耦合。

机械工程跑路哥 4491

我们为什么要用 IoC 和 AOP

人总是会忽略习以为常的事物

RudeCrab的博客 635

spring ioc和aop

常见的通知类型有:前置通知(Before)、后置通知(After)、返回通知(After-returning)、异常通知(After-throwing)和环绕通知(Around)。System.out.println("环绕通知的前置通知");System.out.println("环绕通知的返回通知");System.out.println("环绕通知的异常通知");System.out.println("环绕通知的后置通知");System.out.println("===来一首花海===");

weixin_41653006的博客 2067

spring ioc/aop总结

将日志、事务、权限等横切关注点(Cross-Cutting Concerns)从业务代码中剥离,以“切面”形式统一管理,提升代码复用性和可维护性。:Spring的成功不仅在于技术实现,更在于它倡导的“优雅简化复杂问题”的哲学,这正是每个开发者应追求的境界。),而IOC通过容器统一管理Bean的生命周期,通过依赖注入(DI)自动装配对象间的依赖关系。:只需定义好“积木”(Bean)的规格,由容器自动组装,开发者更关注业务逻辑而非对象管理。:通过抽象共性逻辑为切面,业务代码更纯粹,符合“单一职责原则”。

Amsssssssssss的博客 833

Spring的IOC和AOP

Spring、IOC、AOP、依赖注入、切面、事务

蓝影铁哥的博客 958

Spring AOP和Spring IoC 我真的有在学了

文章目录一、Spring IOCDI和IOCIOC容器初始化二、Spring AOP1.名词解释JoinPoint(连接点)Pointcut(切点)Advice(增强)切点函数2.快速使用2.1 Spring AOP注解2.2 使用示例3.Proxy代理3.1 代理简介3.2 代理分类静态代理动态代理4.AOP运行流程 学习到SpringBoot,有必要更进一步理解和学习Spring更深层的东西。这就学习和整理了这一篇文章。 参看: 《深入理解JVM虚拟机》第三版 https://spring.io

彭_德华的博客 535

Spring中的IOC及AOP概述

Spring中的IOC及AOP概述

多学、多想、多做 1608
上一篇: 架构师是如何练成的?
下一篇: 程序员们!别等到30岁了,才忽然惊醒。那时已经晚了
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值