Spring IoC和Spring AOP

简介: Spring IoC和Spring AOP

Spring IoC和Spring AOP


1.Spring IoC


控制反转(Inversion of Control,IoC),是Spring框架的核心,用来减少程序的耦合性

那什么是控制反转呢,从字面上理解的话,将自己拥有的控制权给了对方,这就是控制反转。


具体的内容可以用下面的例子来理解


以前没有微信付款以及支付宝,人们进行交易就必须面对面拿出现金进行交易还常常涉及到找零等等


而现在有了支付软件这个第三方平台,人们可以不再需要现金交易,这就大大降低了人与人之间的联系。


到了现在刷脸支付甚至可以直接不再需要商家看管,只需要定期换货就可以了。

那在项目中,各个功能模块就相当于例子中的人,解耦的含义其实就是各个项目模块之间不再需要复杂的依赖,从而避免了因为某一个模块发生问题导致整个项目宕机。有了Spring IoC之后,对象的实例不再由调用者创建,而是交给框架来实现,也就是把控制权从调用者转移到了Spring容器中,这就是控制反转


当然,控制反转也有另一种说法,也可以叫依赖注入(Dependency Injection,DI),这其实是一个问题的两个角度。上面是从调用者角度出发,所以是控制反转;那么从Spring容器的角度出发呢,它负责将所依赖的对象赋值给调用者使用,相当于为调用者注入所需要的依赖实例,所以也可以叫做依赖注入。


我们可以这样概括二者 在Spring中实现控制反转的是IoC容器,实现方法是依赖注入


2.Spring AOP


Spring AOP是Spring框架体系结构中非常重要的功能模块之一,该模块提供了面向切面编程。


2.1 Spring AOP的基本概念


AOP(Aspect-Oriented Programming),即面向切面编程,它与面向对象编程相辅相成。在面向对象中,我们都是以类作为程序的基本单元。熟悉Java的都知道,它就是一门面向对象的语言,因为它就是从类的角度出发。而AOP中的基本单元是切面(Aspect),由于在面向对象中,我们在代码重用时都是通过封装或者继承等等方式,但是还是有同样的代码分散到各个方法的现象。AOP的思想就是将这些重复的代码提取出来,在程序编译或者运行的时候,再将这些抽取出来的代码应用到需要执行的地方。


2.2 AOP的术语


  1. 切面
    切面是指封装横切到系统系统功能的类
  2. 连接点
    连接点是指程序运行中的一些时间点,如方法调用或异常抛出
  3. 切入点
    切入点是指那些需要处理的连接点,所有的方法执行都是连接点,通过切入点确定哪些连接点需要处理
  4. 通知(增强处理)
    通知是切面的具体实现,在定义好的切入点处所要执行的程序代码
  5. 引入
    引入允许在现有的实现类中添加自定义的方法和属性
  6. 目标对象
    目标对象是指所有被通知的对象;如果AOP框架使用运行时代理的方式(动态AOP)来实现切面,那么通知对象总是一个代理对象。
  7. 代理
    代理是通知应用到目标对象后被动态创建的对象
  8. 织入织入是将切面代码插入到目标对象上,从而生成代理对象的过程。AOP的织入有三种方式
  • 编译器织入: 需要特殊的编译器
  • 类装载器织入:需要特殊的类装载器
  • 动态代理织入:在运行期为目标类添加通知生成子类的方式


通知类型:


  • 前置通知(Before advice):在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。
  • 后置通知(After returning advice):在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
  • 异常通知(After throwing advice):在方法抛出异常退出时执行的通知。
  • 最终通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
  • 环绕通知(Around Advice):包围一个连接点的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。

环绕通知是最常用的通知类型。和AspectJ一样,Spring提供所有类型的通知,推荐使用尽可能简单的通知类型来实现需要的功能。例如,如果你只是需要一个方法的返回值来更新缓存,最好使用后置通知而不是环绕通知,尽管环绕通知也能完成同样的事情。用最合适的通知类型可以使得编程模型变得简单,并且能够避免很多潜在的错误。

目录
相关文章
|
1天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
21天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
41 2
|
1月前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
25天前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
51 5
|
29天前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
58 8
|
29天前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
29天前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
42 5
|
29天前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
43 4
|
1月前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
37 1
|
1月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
42 0