Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >探究 Spring Boot 的核心:IOC 和 AOP

探究 Spring Boot 的核心:IOC 和 AOP

原创
作者头像
小马哥学JAVA
发布于 2024-02-23 11:23:29
发布于 2024-02-23 11:23:29
8320
举报

Spring Boot 作为一种简化 Spring 应用开发的工具,继承了 Spring 框架的核心概念,其中最重要的是控制反转(IOC)和面向切面编程(AOP)。它们是 Spring 框架的基础,同时也深深植根于 Spring Boot 中。本文将讨论 IOC 和 AOP 的概念以及它们在 Spring Boot 中的应用。

IOC(控制反转)

概念

控制反转(Inversion of Control,IOC)是一种设计原则,用于将对象的创建和对象之间的依赖关系的管理从编码中解耦出来,交由外部容器处理。在 Spring 框架中,这个外部容器被称为 Spring IOC 容器。

应用

  • 依赖注入:Spring 框架通过依赖注入(Dependency Injection,DI)来实现 IOC。DI 允许对象通过构造器参数、工厂方法的参数或对象实例变量的设置来定义它们的依赖。
  • 容器管理:Spring IOC 容器负责实例化、配置和组装这些对象。开发者只需要定义好类和类之间的依赖关系,Spring IOC 容器在运行时自动将它们组合在一起。

优势

  • 松耦合:IOC 使得应用程序的组件之间更加松耦合,从而提高了代码的可维护性和可扩展性。
  • 便于测试:由于依赖可以通过接口注入,因此更容易进行单元测试
  • 集中化配置:可以在不同环境下重新配置组件而无需修改代码。

AOP(面向切面编程)

概念

面向切面编程(Aspect-Oriented Programming,AOP)允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中分离出来。横切关注点是影响应用多个部分的问题,例如日志记录、事务管理和安全性。

应用

  • 切面:AOP 通过定义“切面”(aspects),提供了一种插入这些横切关注点的方法,而不会影响到主业务逻辑。
  • 通知:切面可以定义通知(advice),这些通知是你希望在方法执行前、后或抛出异常时应用的逻辑。
  • 连接点和切点:在应用中,连接点(join points)是我们可以插入切面的点,比如方法调用。切点(pointcuts)定义了我们要在哪些连接点应用切面。

优势

  • 代码分离:AOP 有助于将非业务逻辑分离,减少了代码的重复。
  • 更清晰的业务逻辑:将非核心逻辑移到切面中,使得业务逻辑更加清晰。
  • 动态代理:Spring AOP 默认使用动态代理来实现 AOP 支持,这使得在不更改源代码的情况下添加横切关注点变得可行。

结合使用 IOC 和 AOP

在 Spring Boot 应用中,IOC 和 AOP 结合使用可以极大地提升应用设计的质量。IOC 容器负责创建对象和管理依赖,而 AOP 则负责插入横切关注点。这两者的结合使得开发者可以更加专注于业务逻辑的实现,而将其他关注点(如日志、事务等)委托给框架处理。

结论

IOC 和 AOP 是 Spring 框架的两大核心组件,并且在 Spring Boot 中得到了充分的利用。它们的结合提供了强大的功能,可以帮助开发者创建更加松耦合、易于维护和测试且高效的 Java 应用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring AOP和IOC
Spring的核心机制是依赖注入(Dependency Inversion),也称为控制反转(IOC)。所谓依赖注入,就是指运行工程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖外部的注入。
week
2018/08/27
2530
Spring全家桶之Spring核心篇,深度分析IoC以及AOP
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 👋大家好!我是你们的老朋友Java学术趴。最近小编又在整了Spring全家桶笔记,笔记会每天定时的进行发放。小编会每天分享的呦。Spring 框架不局限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以
Java学术趴
2022/05/06
5940
Spring全家桶之Spring核心篇,深度分析IoC以及AOP
深入解析Spring的IOC与AOP及其在项目中的应用
在现代的软件开发中,为了提高代码的可维护性、可扩展性以及降低代码的耦合度,使用设计模式和面向切面编程(AOP)成为了程序员们常用的技术手段。Spring作为一个优秀的Java开发框架,提供了IOC和AOP两个核心特性,极大地简化了开发工作。本文将深入探讨Spring的IOC和AOP的概念、原理以及它们在项目中的应用。
疯狂的KK
2023/08/14
9810
深入解析Spring的IOC与AOP及其在项目中的应用
Spring的核心特性
众所周知,Spring的核心特性就是IOC和AOP,IOC(Inversion of Control),即“控制反转”;AOP(Aspect-OrientedProgramming),即“面向切面编程”。
赵哥窟
2019/02/25
1.7K0
Spring的核心特性
Spring AOP
Spring AOP 使用场景蛮多的属性检查、日志等,所有拦截下来可以在切面共同做的事儿似乎都可以用AOP(面向切面)的方式解决。在面试的过程中AOP 也是除Ioc及MVC 以外问的较多的一个点,通常是这样的: AOP 是什么?面向切面编程。 Spring AOP 是如何实现的? 配置下拦截器,完成具体的处理逻辑,其实本质就是一个动态代理。 那Spring 实现动态代理的方式有哪些?CGLib、JDK 原生 那这两种方式默认使用哪一种,如何指配?#&@¥&@¥&@#¥& 那JDK 原生方式与CGlib 区别说一下?&&#¥#¥ 提到了CGlib的实现是ASM,那ASM 具体的原理是怎样的?#&@¥&@¥&@#¥& 说一下ASM 几个核心的函数?#&@¥&@¥&@#¥& 说一下ASM 操作的过程中,JVM 里都发生了哪些事儿?#&@¥&@¥&*@#¥& 刚才说了这么多反射还有JVM 相关的,如果使用反射的方式向一个List<String> ,插入一个Integer,是正常还是Error,为什么? 好的,咱来谈谈泛型的擦除。所以会很容易被转移话题的。 其实AOP 相对于具体语言的实现细节,最主要的是它的实现思想。 先说一下思想: AOP 面向切面编程,算是对oop 面向对象编程的一种补充,指的在许多流程中都存在某些点需要做类似的事儿,可以将这个点设置为横切关注点(相对的业务处理的是核心关注点),完后完成对应事件的设定。 这种场景比如说权限检查、日志等。。 要理解整个AOP 过程还需要一点关键词: 横切关注点: 具体需要拦截的点,一种发现的过程 切面(aspect): 对横切关注点的一种抽象,一种抽象的过程 连接点(joinpoint):要被拦截到的具体点 切入点(pointcut):对于连接点进行,一种设置拦截定义的过程 通知(advice):具体就是指的拦截到具体的连接点之后的要执行的逻辑代码,分为:前置、后置、最终、环绕 这五类通知 目标对象:代理的目标对象 织入(weave):将切面应用到目标对象,并创建对应对象代理创建的过程 引入(introduction):动态代理运行的过程 然后是AOP 后续具体的使用细节及实现原理: 使用过程大体是这样的: 1、检查业务组件,查看是否存在大量可横切点 2、定义切入点 3、定义增强处理,就是切入点前后的具体通知 4、设置完成,实现对应AOP 操作 Spring 对AOP 的支持是建立在Ioc 的基础上的,也就是AOP 代理有Ioc 容器负责处理依赖关系,及其生成和管理。 那么Spring AOP 所依赖的Ioc 里面使用代理的方式是默认使用JDK 原生方式,也可以选配CGlib实现。 在使用层面上,JDK 要求实现接口,而CGlib 不用,可以基于类实现。 JDK 是根据接口实现一个具体的class 对象然后加载到具体的堆和方法区完成的实现。 CGlib 是依赖于ASM ,通过字节码操作根据现有的类,通过添加字节码的方式构建一个新的对应类的子类来完成对应的实现。 就当前阶段来说两者在小规模调用差异基本是不大的,当前hibernate 用的就是ASM 方式实现的懒加载。
邹志全
2019/10/08
4680
初始Spring 详解
Spring框架: 轻量级框架, Java EE的春天,当前主流框架, Spring中:春天
Java_慈祥
2024/08/06
1210
初始Spring 详解
关于 Spring :松耦合、可配置、IOC、AOP
SpringFramework 是一个开源的、松耦合的、分层的、可配置的一站式企业级 Java 开发框架,它的核心是 IOC 与 AOP ,它可以更容易的构建出企业级 Java 应用,并且它可以根据应用开发的组件需要,整合对应的技术。
訾博ZiBo
2025/01/06
660
面试之Spring AOP和IOC
AOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
Java技术债务
2022/08/09
3850
面试之Spring AOP和IOC
spring框架(2)— 面相切面编程AOP
spring框架(2)— 面相切面编程AOP   AOP(Aspect Oriented Programming),即面向切面编程。   可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理
Mister24
2018/05/14
1.1K0
Spring AOP(一) AOP基本概念
AOP全名Aspect-oriented programming面向切面编程大法,它有很多兄弟,分别是经常见的面向对象编程,朴素的面向过程编程和神秘的函数式编程等。所谓AOP的具体解释,以及和OOP的区别不清楚的同学可以自行去了解。
宁在春
2022/10/31
3250
Spring AOP(一) AOP基本概念
Spring IOC与AOP事务底层原理及源码核心点解析
Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
小马哥学JAVA
2024/10/06
2620
一篇带你进入Spring的世界
我们上学期开了一门网络编程课,讲了servlet+jsp,不过那个老师就喜欢扯东扯西的讲一大堆无关紧要的东西,好家伙重点全跳过,我就索性就没听过了。所以jsp学的不好的同学无所谓,不过建议Servlet学习透彻些,毕竟现在的Java WEB都还是围绕着Servlet的,这些框架也都是封装的Servlet。
东边的大西瓜
2022/05/05
2760
一篇带你进入Spring的世界
深入了解 Spring Boot 核心特性、注解和 Bean 作用域
Spring Boot 是基于 Spring Framework 构建应用程序的框架,Spring Framework 是一个广泛使用的用于构建基于 Java 的企业应用程序的开源框架。Spring Boot 旨在使创建独立的、生产级别的 Spring 应用程序变得容易,您可以"只是运行"这些应用程序。
小万哥
2023/07/30
3960
深入了解 Spring Boot 核心特性、注解和 Bean 作用域
一文读懂Spring中的DI和AOP
Spring框架通过POJO最小侵入性编程、DI、AOP、模板代码手段来简化了Java 开发,简化了企业应用的开发。POJO和模板代码相对来说好理解,本篇重点解读下DI和AOP。
coderidea
2022/06/08
3330
一文读懂Spring中的DI和AOP
Spring AOP(一) AOP基本概念
 Spring框架自诞生之日就拯救我等程序员于水火之中,它有两大法宝,一个是IoC控制反转,另一个便是AOP面向切面编程。今日我们就来破一下它的AOP法宝,以便以后也能自由使出一手AOP大法。
程序员历小冰
2019/02/11
4800
Spring AOP(一) AOP基本概念
【Spring】 ——初识Spring
Spring是一个开源的Java应用框架,它提供了一套全面的解决方案,用于开发企业级Java应用程序。Spring框架旨在简化Java开发,并提供了一种灵活且非侵入式的编程模型,帮助开发人员构建可扩展、模块化和可维护的应用程序。
终有救赎
2023/10/16
4020
【Spring】 ——初识Spring
Java Spring Boot中的AOP、DI和IOC
AOP是一种编程范式,它允许开发人员将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,例如日志记录、性能监控、事务管理等。在Spring Boot中,AOP通过切面(Aspect)和通知(Advice)实现。
GeekLiHua
2025/01/21
1340
Spring核心之面向切面编程(AOP)
Spring框架是一个功能强大的Java开发框架,它提供了许多核心特性,包括控制反转(IOC)和面向切面编程(AOP)。本文将解析什么是Spring的AOP,以及如何在项目中使用它。
灬沙师弟
2024/01/25
2070
Spring核心之面向切面编程(AOP)
Spring AOP
在软件开发中,散布于应用中多处的功能被称为横切关注点(crosscutting concern)。通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往会直接嵌入到应用的业务逻辑之中)。把这些横切关注点与业务逻辑相分离正是面向切面编程(AOP)所要解决的问题。
Steve Wang
2022/05/10
5440
Spring AOP
Spring Boot2(六):使用Spring Boot整合AOP面向切面编程
众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转。本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理。
鸟不拉屎
2019/07/04
11.2K0
相关推荐
Spring AOP和IOC
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档