Spring Bean生命周期(上)

简介: Spring Bean生命周期(上)

spring容器通过反射的方式创建bean对象,在创建之前需要知道bean对象的类信息,定义bean对象有如下2种方式:

定义bean对象形式多种多样

xml、注解、properties、json、yaml

例如xml:

image.png

首先加载xml文件到内存,得到io流,使用sax或dom4j将xml解析成document对象,然后得到父子节点node,然后设置到BeanDefinition中

不同的定义方式对应不同的解析方式,而spring容器需要一个统一的规范来接收解析好的bean信息。

spring容器通过BeanDefinition来接收定义好的bean信息。

所有需要进行解析的操作都需要实现BeanDefinitionReader接口。

spring容器通过BeanDefinition根据bean定义好的类信息通过反射的方式创建对象、使用和销毁。

image.png

为了完成某些具体的扩展功能,有以下两种后置处理器的实现方式:

  • • BeanFactoryPostProcessor

该处理器生成BeanFactory

  • • BeanPostProcessor

该处理器生成Bean

而要使用spring容器中的bean对象必须要通过BeanFactory。

我们经常使用ApplictionContext中的getBean获取bean对象

context.getBean(Person.class)

image.png

Bean 工厂实现应支持标准 Bean 生命周期接口, 上图为bean完整的初始化方法集及其顺序。

beanFactory怎么实现的扩展呢

举例说明:

图[xml定义bean]中${jdbc.username},在BeanDefined读取到的时候,属性值并没有改变,什么时候才真正替换为真实值呢?

这里有一个很重要的接口BeanFactoryPostProcessor

image.png

该接口的一个实现类PlaceholderConfigurerSupport,该类的作用是解析在 Bean 定义属性值中占位符的属性资源配置器的抽象基类。

获取BeanDefined中property中的value值然后解析占位符${jdbc.username},替换为真实值。

image.png

类似这样的扩展可以实现很多,预留出很多的扩展点,在需要增强的时候任意扩展,这就是BeanFactoryPostProcessor类的核心思想所在。

注解

image.png

解析xml生成bean的流程是原有的标准解析流程,而解析注解的方式生成bean是在原有保准流程之上做的扩展。

BeanFactoryPostProcessor的子类ConfigurationClassPostProcessor,这个类用来解析各种注解。

创建对象的过程

创建对象包含两个环节,实例化和初始化。

实例化只是在内存中开辟空间,初始化是属性赋值。

image.png具体的bean对象是保存在spring容器中map中

image.png

  • • singletonObjects 一级缓存对象集合
  • • earlySingletonObjects 二级缓存对象集合
  • • singletonFactories 三级缓存对象集合
相关文章
|
1月前
|
Java 应用服务中间件 Spring
Spring系列文章:Bean的作⽤域
Spring系列文章:Bean的作⽤域
|
1月前
|
Java Spring 容器
Spring系列文章:Bean的获取⽅式
Spring系列文章:Bean的获取⽅式
|
1月前
|
缓存 Java Spring
Spring 框架中 Bean 的生命周期
Spring 框架中 Bean 的生命周期
36 1
|
2月前
|
XML Java 开发者
Spring Boot中的bean注入方式和原理
Spring Boot中的bean注入方式和原理
100 0
|
10天前
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
19 1
|
12天前
|
前端开发 Java 数据格式
【Spring系列笔记】定义Bean的方式
在Spring Boot应用程序中,定义Bean是非常常见的操作,它是构建应用程序的基础。Spring Boot提供了多种方式来定义Bean,每种方式都有其适用的场景和优势。
31 2
|
15天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
23天前
|
Java 数据库连接 开发者
浅谈Spring的Bean生命周期
浅谈Spring的Bean生命周期
21 1
|
27天前
|
XML Java 数据格式
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
24 0
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
|
1月前
|
Java Spring
flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案
flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案