Spring创建Bean的流程分享

 更新时间:2025年11月19日 08:46:57   作者:YogaK  
Spring创建Bean流程主要包括实例化、属性赋值、初始化和销毁四个阶段,实例化通过new关键字进行,属性赋值通过BeanDefinition获取并注入,处理Aware接口以获取Spring容器资源,调用InitializingBean和init-method进行初始化,最后通过DisposableBean和destory-method进行销毁

Spring创建Bean流程


大致步骤

简单来说:Bean会经历四个阶段: 实例化–》属性赋值–》初始化–》销毁

具体来说:

  • 实例化:new xxx();有两个时候会触发实例化:

像容器申请一个Bean的时候

当容器在初始化一个Bean的时候,发现该Bean还依赖另一个Bean。(在BeanDefinition中找到)

  • 设置对象属性:通过BD找到Bean需要注入的一些属性,并注入,当发现依赖另一个对象时,触发另一个对象的实例化。
  • 处理Aware接口:Spring会检测对象是否实现了XxxAware接口,如果实现了,就会调用对应的方法。例如BeanNameAware(对BeanName进行设置)、BeanClassLoaderAware(传入一个自定义类加载器)、BeanFactoryAware(扩展BeanFactory)BeanPostProcessor的前置处理。
  • initializingBean: Spring检测对象如果实现了这个接口,就会执行他的afterPropertiesSet()方法,定制初始化逻辑。
  • init-method:如果Spring发现Bean实现了这个属性,就会调用他的配置方法,执行初始化逻辑。或者使用注解 BeanPostProcessor的后置处理。到目前位置,Bean的创建过程就完成了,可以正常使用了。
  • DisposableBean:当Bean实现了这个接口,在销毁前就会调用destory()方法
  • destory-method:销毁方法,可以进行内存回收,通过@PreDestory注解

各个接口介绍

1.什么是BeanDefinition?

​ BeanDefinition 是定义 Bean 的配置元信息接口

  • Bean 的类名
  • 设置父 bean 名称
  • Bean 行为配置信息,作用域、自动绑定模式、生命周期回调、延迟加载、初始方法、销毁方法等
  • Bean 之间的依赖设置,dependencies
  • 构造参数、属性设置

2.Aware接口

该接口是一个标识接口,具体的方法需要子类自己去实现。

Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。

基本都能够见名知意,Aware之前的名字就是可以拿到什么资源,例如BeanNameAware可以拿到BeanName,以此类推。

调用时机需要注意:所有的Aware方法都是在初始化阶段之前调用的!

3.BeanPostProcessor

做通知。

4.initializingBean

afterPropertiesSet这个方法可以用在一些特殊情况中,也就是某个对象的某个属性需要经过外界得到。

比如说查询数据库等方式,这时候可以用到spring的该特性,只需要实现InitializingBean即可

5.init-method

用来替代继承 InitializingBean接口

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Maven插件docker-maven-plugin的使用

    Maven插件docker-maven-plugin的使用

    在我们持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。感兴趣的可以了解一下
    2021-06-06
  • springboot如何通过接口实现动态二维码的定时刷新

    springboot如何通过接口实现动态二维码的定时刷新

    这篇文章主要为大家详细介绍了springboot如何通过接口实现动态二维码的定时刷新功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-05-05
  • SpringBoot使用Sa-Token实现权限认证

    SpringBoot使用Sa-Token实现权限认证

    本文主要介绍了SpringBoot使用Sa-Token实现权限认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java多线程atomic包介绍及使用方法

    Java多线程atomic包介绍及使用方法

    这篇文章主要介绍了Java多线程atomic包介绍及使用方法,涉及原子更新基本类型介绍及代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • MongoDB在Spring Boot中的使用方式举例介绍

    MongoDB在Spring Boot中的使用方式举例介绍

    MongoDB是基于Json数据结构的非关系型数据库,每一个Json文档有一个唯一的主键,下面通过实例代码讲解MongoDB在Spring Boot中的使用方式,感兴趣的朋友一起看看吧
    2025-05-05
  • CentOS7和8中安装Maven3.8.4的简单步骤

    CentOS7和8中安装Maven3.8.4的简单步骤

    maven是属于apache的一个工具,主要是对java进行编译打包,解决依赖关系,下面这篇文章主要给大家介绍了关于CentOS7和8中安装Maven3.8.4的相关资料,需要的朋友可以参考下
    2022-04-04
  • 为什么rest接口返回json建议采用下划线形式,不要用驼峰

    为什么rest接口返回json建议采用下划线形式,不要用驼峰

    为什么rest接口返回json建议采用下划线形式,不要用驼峰?今天小编就来为大家说明一下原因,还等什么?一起跟随小编过来看看吧
    2020-09-09
  • Mybatis ResultType如何处理返回类型

    Mybatis ResultType如何处理返回类型

    这篇文章主要介绍了Mybatis ResultType如何处理返回类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 详解SpringBoot配置devtools实现热部署

    详解SpringBoot配置devtools实现热部署

    本篇文章主要介绍了详解SpringBoot配置devtools实现热部署 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 如何在Spring Boot项目中集成MQTT协议

    如何在Spring Boot项目中集成MQTT协议

    本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加Eclipse Paho依赖、配置连接参数、实现消息发布订阅、测试接口及注意事项,如唯一客户端ID、安全措施等,帮助开发者快速实现物联网通信,感兴趣的朋友一起看看吧
    2025-06-06

最新评论