Spring创建Bean的流程

本文详细介绍了Spring框架中Bean从实例化到销毁的整个生命周期过程,包括实例化、属性赋值、初始化、销毁等关键阶段。此外,还深入探讨了BeanDefinition配置元信息的作用及Aware接口、BeanPostProcessor等组件的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在这里插入图片描述

大致步骤

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

具体来说:

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

    • 像容器申请一个Bean的时候
    • 当容器在初始化一个Bean的时候,发现该Bean还依赖另一个Bean。(在BeanDefinition中找到)
  2. 设置对象属性:通过BD找到Bean需要注入的一些属性,并注入,当发现依赖另一个对象时,触发另一个对象的实例化。

  3. 处理Aware接口:Spring会检测对象是否实现了XxxAware接口,如果实现了,就会调用对应的方法。例如BeanNameAware(对BeanName进行设置)、BeanClassLoaderAware(传入一个自定义类加载器)、BeanFactoryAware(扩展BeanFactory)

  4. BeanPostProcessor的前置处理。

  5. initializingBean: Spring检测对象如果实现了这个接口,就会执行他的afterPropertiesSet()方法,定制初始化逻辑。

  6. init-method:,如果Spring发现Bean实现了这个属性,就会调用他的配置方法,执行初始化逻辑。或者使用注解

  7. BeanPostProcessor的后置处理

    到目前位置,Bean的创建过程就完成了,可以正常使用了。

  8. DisposableBean:当Bean实现了这个接口,在销毁前就会调用destory()方法

  9. destory-method:销毁方法,可以进行内存回收,通过@PreDestory注解

各个接口介绍

1.什么是BeanDefinition?

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

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

img

2.Aware接口

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

​ Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。基本都能够见名知意,Aware之前的名字就是可以拿到什么资源,例如BeanNameAware可以拿到BeanName,以此类推。调用时机需要注意:所有的Aware方法都是在初始化阶段之前调用的!

3.BeanPostProcessor

​ 做通知。

4.initializingBean

​ afterPropertiesSet这个方法可以用在一些特殊情况中,也就是某个对象的某个属性需要经过外界得到,比如说查询数据库等方式,这时候可以用到spring的该特性,只需要实现InitializingBean即可

5.init-method

用来替代继承 InitializingBean接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值