首页 > 其他分享 >Spring事务管理与AOP代理的原理,默认的单例对象和代理对象销毁的时机

Spring事务管理与AOP代理的原理,默认的单例对象和代理对象销毁的时机

时间:2024-10-10 14:36:02浏览次数:9  
标签:事务管理 对象 Spring 代理 作用域 Bean 单例

Spring的事务管理是使用AOP(面向切面编程)代理的原理来实现的。

Spring事务管理与AOP代理原理

  1. AOP代理的作用:

    • 在Spring中,AOP代理用于在目标对象的方法执行前后注入自定义的逻辑,这些逻辑通常与业务逻辑无关,但需要在业务逻辑执行时同步执行,如事务管理、日志记录、性能检测等。
    • 通过AOP代理,可以将这些横切关注点(cross-cutting concerns)从核心业务逻辑中分离出来,使得业务逻辑更加清晰和模块化。
  2. AOP代理的实现方式:

    • Spring AOP主要使用了两种动态代理方式:JDK动态代理和CGLIB动态代理。
    • 如果目标对象实现接口,Spring默认使用JDK动态代理。JDK动态代理是基于接口的代理,通过反射机制生成一个实现了目标对象接口的代理类。
    • 如果目标对象没有实现接口,Spring使用CGLIB动态代理。CGLIB代理是基于类代理,通过操作字节码生成目标对象的子类,并重写其中的方法。
  3. 事务管理的实现:

    • 当为某个Bean配置事务管理时,Spring会为其创建一个代理对象。
    • 当调用该Bean的某个方法时,实际上是调用生成的代理对象的方法。
    • 代理对象会在方法执行前后注入事务管理的逻辑,如开启事务、提交事务、回滚事务等。

为什么要创建代理对象?

  1. 实现AOP功能:代理对象是实现AOP功能的关键。通过代理对象,可以在目标对象的方法执行前后注入自定义的逻辑,从而实现横切关注点的分离。
  2. 控制目标对象的访问:代理对象还可以提供额外的访问控制,如权限控制、参数校验等。

Spring的单例模式

  1. 默认单例模式:

    • Spring容器默认会将所有的Bean都设置为单例模式。这意味着在Spring容器的整个生命周期中,每个Bean只会被创建一次,并且每次获取该Bean时都会返回同一个实例。
    • 单例模式有助于减少内存占用和提高性能,因为多个组件可以共享同一个Bean实例。
  2. 如何设置单例模式:

    • 在Spring中,可以通过注解(如@Component@Bean等)或XML配置来显式地设置Bean的作用域为单例。但通常情况下,无需额外配置,因为单例模式是Spring的默认行为。
  3. 单例模式的注意事项:

    • 在并发环境下,单例模式可能会引发线程安全问题。因此,在Bean类中需要采用同步机制或使用线程安全的对象来确保线程安全。
    • 单例模式可能会增加耦合性,因为多个组件共享同一个Bean实例。因此,在应用设计中需要慎重考虑是否真正需要使用单例模式。

Spring的事务管理是通过AOP代理来实现的,代理对象的创建是为了实现AOP功能和控制目标对象的访问。同时,Spring容器默认会将所有的Bean设置为单例模式,以提高性能和减少内存占用。

重点理解:在Spring框架中,当为某个Bean配置事务管理时,Spring确实会为其创建一个代理对象以及目标对象。这两个对象的销毁时机取决于Spring容器的生命周期管理和Bean的作用域设置。

代理对象的销毁时机

代理对象的销毁时机通常与Spring容器的生命周期相关,具体取决于代理对象的作用域设置:

  1. 单例作用域(Singleton):

    • 当代理对象被配置为单例作用域时,它的生命周期与Spring容器的生命周期一致。
    • 在Spring容器关闭时,会触发代理对象的销毁方法。此时,Spring容器会调用代理对象实现的DisposableBean接口的destroy方法(如果代理对象实现了该接口),或者调用在配置文件中通过destroy-method属性指定的销毁方法。
  2. 原型作用域(Prototype):

    • 当代理对象被配置为原型作用域时,每次获取代理对象时都会创建一个新的实例。
    • 代理对象实例的销毁不是由Spring容器管理的,而是由使用它们的代码来管理的。通常,这些实例会在不再被使用时被垃圾回收器回收。
  3. 其他作用域:

    • 对于会话作用域(Session Scope)、线程作用域(Thread Scope)和请求作用域(Request Scope)的代理对象,它们的生命周期分别与会话、线程和请求的生命周期一致。
    • 当会话结束、线程结束或请求结束时,会触发代理对象的销毁方法。

目标对象的销毁时机

目标对象的销毁时机也取决于其作用域设置,但通常与代理对象的销毁时机相关联:

  1. 如果目标对象也是单例作用域:

    • 当Spring容器关闭时,会同时销毁代理对象和目标对象。
  2. 如果目标对象是原型作用域或其他作用域:

    • 目标对象的销毁时机将根据其作用域设置来确定,可能与代理对象的销毁时机不同。
    • 例如,如果目标对象是原型作用域,则每次获取目标对象时都会创建一个新的实例,并且这些实例的销毁将由使用它们的代码来管理。

需要注意的是,Spring容器的关闭通常发生在应用程序关闭时。在Spring Boot应用中,Spring容器会在应用程序退出时自动关闭。如果希望在应用程序运行期间手动关闭Spring容器,可以使用ConfigurableApplicationContext接口的close方法来关闭容器。

所以代理对象和目标对象的销毁时机取决于Spring容器的生命周期管理和Bean的作用域设置。在应用程序关闭时、目标对象或代理对象的作用域结束时,或者代理对象实例不再被使用时,这些对象可能会被销毁。

标签:事务管理,对象,Spring,代理,作用域,Bean,单例
From: https://www.cnblogs.com/blogtech/p/18456294

相关文章

  • Java中常见的异常分类,结合Spring的事务巩固复习
    Java异常的继承关系是通过类继承的方式构建的一个层次结构。以下是对Java异常继承关系的详细图解说明:异常类的顶层Throwable:所有异常和错误的超类。Throwable的子类Error:通常是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将......
  • Spring Security(常见过滤器介绍)
    SpringSecurity是一个基于Spring框架的安全性解决方案,为Java应用程序提供了一套全面的安全解决方案。一、概述SpringSecurity是Spring采用AOP(面向切面编程)思想,基于servlet过滤器实现的安全框架。它致力于保护基于Spring的应用程序,并成为了这类应用的事实上的安全标准。S......
  • Spring事务的1道面试题
    每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。原理Spring事务的原理是:通过AOP切面的方式实现的,也就是通过代理模式去实现事务增强。具体过程是:对包含@Transactional注解的方法进行拦截,然后重写,重新在方法里加入异......
  • Springboot二手车估值与销售网络平台l0471(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表客户,汽车分类,车辆信息,车辆估价,商家开题报告内容一、研究背景随着汽车消费市场的不断扩大和二手车交易的增多,设计和实现一个二手车估值与销售网络平台具有重......
  • Springboot动漫图片分享网站k3r27(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,画手,图片分类,图片分享,求稿任务,接稿请求开题报告内容一、研究背景随着互联网技术的飞速发展和动漫文化的普及,越来越多的人开始分享和欣赏动漫图片。然......
  • 高效美发店运营:SpringBoot管理系统详解
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理美发门店管理系统的相关信息成为必然。开发合适的美发门店管理系统,可以方便管理人员对美发......
  • 浏览器报错 | 代理服务器可能有问题,或地址不正确
    问题描述Windows连网情况下,浏览器访问地址显示“你尚未连接,代理服务器可能有问题,或地址不正确。”解决方法电脑右下侧的WiFi图标右键,打开网络和Internet设置打开代理打开自动设置代理的“自动检测设置”关闭手动设置代理的“使用代理服务器”这样就可以正......
  • 【关注可白嫖源码】springboot基于微信小程序的二手书籍交易平台
    摘 要国内的京东商城、天猫、苏宁易购等大型网站在图书销售等商品零售领域已经十分成熟完善,但是以高校学生二手书为主的二手图书资源目前还没有得到合理的开发利用。本人设计和实现的基于微信小程序的二手书籍交易平台是通过合理的市场调查然后才着手实施的。系统分前端和......
  • 【关注可白嫖源码】Springboot+VUE的学生选课系统
    摘要随着人类向信息社会的不断迈进,风起云涌的信息时代正掀起一次新的革命,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的学生选课系统来管理学生选课信息,会使管理工作系统化、规范化,提高管理效率。本课题的研究对象是学生选课系统,该系统......
  • 一篇文章讲清楚Spring如何解决循环依赖,以及为什么需要三级缓存
    这是笔者从两道面试题出发的思考,如果有不对的地方,还请指正,仅供参考Q:讲一讲spring的循环依赖循环依赖(CircularDependency)指的是在对象之间互相依赖的情况。例如,BeanA依赖于BeanB,而BeanB又依赖于BeanA,形成了一个循环。Spring框架中主要处理的是单例(singleton)作......