首页 > 其他分享 >Spring框架bean的生命周期

Spring框架bean的生命周期

时间:2024-09-20 16:13:07浏览次数:8  
标签:BeanPostProcessor 生命周期 初始化 Spring +-----------------------------------+ Bean 接口 

在Spring框架中,Bean的生命周期是指一个Spring容器中Bean从创建到销毁的整个过程。Spring容器负责管理Bean的生命周期,它通过依赖注入和面向切面的编程(AOP)为开发者简化了许多繁琐的操作。Spring框架提供了许多钩子方法,允许开发者在特定阶段执行自定义的逻辑。Bean的生命周期大致可以分为以下几个步骤:

1. 实例化(Instantiation)

  • 当Spring容器启动时,它会通过反射机制创建Bean实例。此时,Bean对象被创建但还没有设置任何属性。

2. 属性注入(Dependency Injection/Populate Properties)

  • Spring根据配置文件(如XML或注解)中提供的定义,为Bean注入属性。这一步是通过Setter方法或者构造函数来完成的。

3. Aware接口回调(Aware Interface Callbacks)

  • 如果Bean实现了Spring提供的某些特殊接口(例如BeanNameAwareBeanFactoryAwareApplicationContextAware等),Spring会在这个阶段回调这些接口方法,传递相应的上下文信息给Bean。

  • 常见的接口:

    • BeanNameAware: 获取容器中Bean的名称
    • BeanFactoryAware: 获取当前BeanFactory对象
    • ApplicationContextAware: 获取ApplicationContext对象

4. BeanPostProcessor的前置处理(Post-Initialization / BeanPostProcessor Before Initialization)

  • 如果容器中有配置BeanPostProcessor接口实现类,它会在Bean初始化之前对Bean进行一些处理(例如代理、修改Bean的状态等)。这个阶段是在@PostConstructInitializingBean之前。
  • 相关方法:BeanPostProcessor.postProcessBeforeInitialization(Object bean, String beanName)

5. 初始化(Initialization)

  • 这一阶段主要是Bean的自定义初始化逻辑。如果Bean实现了InitializingBean接口,它的afterPropertiesSet()方法会被调用。或者通过配置自定义的初始化方法(例如在XML中定义init-method,或通过注解@PostConstruct),Spring会执行这些初始化操作。

6. BeanPostProcessor的后置处理(Post-Initialization / BeanPostProcessor After Initialization)

  • 在初始化完成后,Spring容器会再次调用BeanPostProcessorpostProcessAfterInitialization()方法,对Bean进行后续的处理操作,如代理增强等。这一步通常会用来做AOP的相关操作。

7. Bean就绪使用(Bean is Ready for Use)

  • 完成以上步骤后,Bean进入就绪状态,可以被应用程序正常使用。

8. 销毁(Destruction)

  • 当Spring容器关闭时,Spring会负责调用销毁方法来清理Bean。如果Bean实现了DisposableBean接口,会调用其destroy()方法。或者可以通过配置文件或注解(@PreDestroy)来指定自定义的销毁方法。销毁主要是用于释放资源,关闭连接等操作。

总结

Bean的生命周期可以归纳为下图中的几个重要阶段:

  1. 实例化 → 2. 属性注入 → 3. Aware接口回调 → 4. BeanPostProcessor前置处理 → 5. 初始化 → 6. BeanPostProcessor后置处理 → 7. Bean可用 → 8. 销毁

图示化:

            +-----------------------------------+
            |  Bean 实例化(通过构造器或工厂方法)|
            +-----------------------------------+
                            ↓
            +-----------------------------------+
            |     属性注入(依赖注入/Setter方法) |
            +-----------------------------------+
                            ↓
            +-----------------------------------+
            |         Aware接口回调(如BeanNameAware) |
            +-----------------------------------+
                            ↓
            +-----------------------------------+
            |     BeanPostProcessor前置处理      |
            +-----------------------------------+
                            ↓
            +-----------------------------------+
            |     初始化(如afterPropertiesSet)  |
            +-----------------------------------+
                            ↓
            +-----------------------------------+
            |     BeanPostProcessor后置处理      |
            +-----------------------------------+
                            ↓
            +-----------------------------------+
            |        Bean就绪可供应用程序使用     |
            +-----------------------------------+
                            ↓
            +-----------------------------------+
            |           Bean销毁(销毁方法)      |
            +-----------------------------------+

通过自定义初始化和销毁方法,以及实现BeanPostProcessorInitializingBeanDisposableBean等接口,开发者可以灵活地控制Bean的生命周期各个阶段的行为。

标签:BeanPostProcessor,生命周期,初始化,Spring,+-----------------------------------+,Bean,接口,
From: https://www.cnblogs.com/juyss/p/18422708

相关文章

  • 基于Node.js+vue基于springboot和vue的音乐网站(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字音乐已成为人们日常生活中不可或缺的一部分。音乐网站作为数字音乐传播的重要平台,不仅为用户提供了丰富的音乐资源,还通过多样......
  • 只有一个方法被aop另外的方法没有aop那么spring会怎么生成代理对象并执行方法
    在Spring中,使用AOP(面向切面编程)时,Spring框架会基于你的配置或注解来决定哪些方法需要被增强(即应用额外的行为,如日志记录、事务管理等)。当只有部分方法被指定为需要AOP处理时,Spring会根据这些配置动态地生成代理对象,并确保只有那些被标记为需要增强的方法在执行时会通过代理逻辑。......
  • 基于Node.js+vue基于SpringBoot的民间遗产中心(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在全球化与文化多样性的背景下,民间遗产作为民族文化的重要组成部分,承载着丰富的历史记忆与地域特色,是连接过去与未来的重要纽带。然而,随着现代化进程的加速,......
  • 基于Node.js+vue基于SpringBoot的毕业生就业系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高等教育的普及,每年有大量毕业生涌入就业市场,而企业与求职者之间的信息不对称问题日益凸显。传统的招聘方式效率低下,难以满足毕业生快速找到合适岗位及......
  • springboot大学计算机信息素养教学网站-计算机毕业设计源码77548
    摘要随着信息素养教育的重要性日益凸显,大学计算机信息素养教学成为学生综合素质培养的重要组成部分。本研究开发了一款大学计算机信息素养教学网站,旨在提供学生、教师和管理员全面的教学和学习支持。信息素养教学旨在培养学生获取、评估和有效使用信息的能力,促进信息技术与......
  • springboot幼教管理系统-计算机毕业设计源码19449
    摘 要幼教管理系统是针对幼儿园或幼教机构开发的一种信息管理系统。随着社会发展和人们对幼儿教育的重视度不断提高,传统的手工管理已经无法满足需求,因此开发一个基于Java的幼教管理系统可以帮助幼儿园或幼教机构高效地管理课程信息、亲子活动等内容,提高工作效率和服务质量。......
  • springboot社区医院管理信息系统-计算机毕业设计源码23303
    摘 要本文旨在探讨基于SpringBoot框架的社区医院管理信息系统的设计与实现。随着信息技术的快速发展,医院管理信息化已成为提升医疗服务水平、优化医疗资源配置的重要手段。社区医院作为基层医疗服务的重要组成部分,其信息化建设的推进对于提高基层医疗服务质量和效率具有......
  • (免费源码)spring boot 双端融合的教学过程管理系统小程序66431 计算机毕业设计必看必学
     springboot双端融合的教学过程管理系统小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,双端融合的教学过程管理系统小程序被用户普遍使用,为方便用户能够可以......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对糖尿病友之家系统等问题,对糖尿病友之家系统进行研究分析,然后开发设计出糖尿病友之家系统以解......
  • SpringBoot入门
    什么是SpringBoot?SpringBoot是一个基于Spring框架的开源项目,旨在简化Spring应用程序的开发。它通过约定优于配置的方式,减少了配置文件的数量,并提供了许多默认设置,使得开发者能够快速构建生产级别的应用程序。1.环境准备1.1安装JDK首先,你需要安装Java开发工具......