Spring中Bean的生命周期

简介: 先直接说出过程,再来演示具体的操作

过程


eefabac9b74d4a568d1d12b99edf2fef.png

简化来说就是


1、首先是实例化Bean,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚末初始化的依赖时,容器就会调用doCreateBean()方法进行实例化,实际上就是通过反射的方式创建出一个bean对象


2、Bean实例创建出来后,接着就是给这个Bean对象进行属性填充,也就是注入这个Bean依赖的其它bean对象


3、属性填充完成后,进行初始化Bean操作,初始化阶段又可以分为几个步骤:


执行Aware接口的方法

Spring会检测该对象是否实现了xxxAware接口,通过Aware类型的接口,可以让我们拿到Spring容器的些资源。如实现

BeanNameAware接口可以获取到BeanName,实现BeanFactoryAware接口可以获取到工厂对象BeanFactory等

执行BeanPostProcessor的前置处理方法postProcessBeforelnitialization(),对Bean进行一些自定义的前置处理

判断Bean是否实现了InitializingBean接口,如果实现了,将会执行lnitializingBean的afeterPropertiesSet()初始化方法;

执行用户自定义的初始化方法,如init-method等;

执行BeanPostProcessor的后置处理方法postProcessAfterinitialization()

4、初始化完成后,Bean就成功创建了,之后就可以使用这个Bean, 当Bean不再需要时,会进行销毁操作,


首先判断Bean是否实现了DestructionAwareBeanPostProcessor接口,如果实现了,则会执行DestructionAwareBeanPostProcessor后置处理器的销毁回调方法

其次会判断Bean是否实现了DisposableBean接口,如果实现了将会调用其实现的destroy()方法

最后判断这个Bean是否配置了dlestroy-method等自定义的销毁方法,如果有的话,则会自动调用其配置的销毁方法;


调用构造方法


7f13e6c23c304091adba8ce12b1f0221.png


设置属性


7c939ac76d3b4e2196a4fbe5b218c668.png


看是否实现了xxxAware接口


43e923c7c11341df9b1e76e32fcbeedb.pnged99df09f7bf430a8c6723fea2d49910.png


看是否设置了BeanPostProcessor接口中的postProcessBeforeInitialization方法


fd30615bfd8242528710f303a065adac.png



看是否设置了初始化方法


91dc723d716e4ff9af988e9779c2dd5e.png


看是否设置了BeanPostProcessor接口中的postProcessAfterInitialization方法


b7f2f5b11a02465497a5bc235460ba02.png


使用


485cd05a4fa34ab48633e5b4098ecdda.png


看是否设置了销毁前的方法


5fe09849d565477cbac69c433f14b53b.png


运行结果


baed07b4db1e43038e6500ebf7bb10ee.png6e8f9778c37448e985c3c9869b28726f.png


初始化和销毁前的方法都有三种方式


声明式注解 @PostConstruct(初始化)@PreDestroy(销毁)

接口式 InitializingBean(初始化接口)、DisposableBean(销毁接口)

自定义式 xml/@Bean方式

顺序都是声明式->接口式->自定义式

a109766b3e9844fda0ad61ccde1551da.png75c6399eb36f4fd3933e52f4201bf735.png6b2fa7656d81449e98d89e271d1fe075.png0fb4c885e3b1477fba18bb5b6373ff96.png

相关文章
|
3天前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
3天前
|
XML Java 数据格式
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
|
3天前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
3天前
|
XML Java 数据格式
Spring5入门到实战------5、IOC容器-Bean管理(三)
这篇文章深入探讨了Spring5框架中IOC容器的高级Bean管理,包括FactoryBean的使用、Bean作用域的设置、Bean生命周期的详细解释以及Bean后置处理器的实现和应用。
Spring5入门到实战------5、IOC容器-Bean管理(三)
|
3天前
|
XML Java 数据格式
Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
这篇文章详细介绍了Spring框架中IOC容器的Bean管理,特别是基于XML配置方式的实现。文章涵盖了Bean的定义、属性注入、使用set方法和构造函数注入,以及如何注入不同类型的属性,包括null值、特殊字符和外部bean。此外,还探讨了内部bean的概念及其与外部bean的比较,并提供了相应的示例代码和测试结果。
Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
|
3天前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
22天前
|
Java Spring 容器
Spring Boot 启动源码解析结合Spring Bean生命周期分析
Spring Boot 启动源码解析结合Spring Bean生命周期分析
59 11
|
22天前
|
消息中间件 Java Kafka
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
34 5
|
27天前
|
安全 Java Spring
Spring问题之如何配置Bean的初始化方法和销毁方法
Spring问题之如何配置Bean的初始化方法和销毁方法
|
25天前
|
XML Java 数据格式
Spring中的bean相关问题
Spring Bean是构建Spring应用的核心元素。熟悉Bean的声明方式、作用域、生命周期以及自动装配机制对于开发高效、健壮的Spring应用至关重要。希望以上内容能够为您在使用Spring框架时提供有效的指南和帮助。
16 1