spring Bean容器简介

本文深入探讨Spring容器的两种类型:BeanFactory与ApplicationContext,以及五种常见应用上下文加载方式。详细解析Bean在Spring中的复杂生命周期,包括实例化、属性填充、各种Aware接口的调用、初始化与销毁过程。

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

spring应用中,应用对象生存与容器(container)中,spring负责创建对象并装配它们,配置它们并管理它们的整个生命周期,从生存到死亡——new到finalize()

spring容器可归为两类

  • bean工厂(org.springframework.beans.factory.BeanFactory) 提供简单DI支持

  • 应用上下文(org.springframework.context.ApplicationContext)基于BeanFactory构建,并提供框架服务,如配置解析

主流使用的是功能更加强大的应用上下文(ApplicationContext)

五种最常见的应用上下文加载:

AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载spring应用上下文

AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文

ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载应用上下文

FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文

XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义

直白一点,就是五种常见加载方式  Application context = new 某种Context(参数传资源位置) 如"a.b.c.class" / "F:/config.xml" / "config.xml"  等等

bean的生命周期

在传统Java中  bean的生命周期就是 new() ,当不再使用时,由gc自动进行垃圾回收

相比spring容器 bean的生命周期会复杂许多,理解bean生命周期非常重要,你可能需要利用spring提供的扩展接口自定义bean的创建过程

bean装载到spring应用上下文的生命周期过程如下:

实例化---->填充属性---->调用BeanNameAware setBeanName()---->调用BeanFactoryAware setBeanFactory()---->调用ApplicationContextAware setApplicationContext()---->调用BeanPostProcessor的预初始化方法---->调用InitializingBean的afterPropertiesSet()方法---->调用自定义的初始化方法---->调用BeanPostProcessor的初始化后方法

至此bean已经可以使用

当容器关闭 ——>调用DisposableBean的destroy()方法——>调用自定义销毁方法——>bean销毁

1.Spring首先对bean进行实例化、

2.Spring将值和bean的引用注入到bean对应的属性当中

3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()

4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFacotry容器实例传入

5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来

6.如果bean实现了BeanPostProcessor接口,Spring将调用他们的postProcessBeforeInitialization()

7.如果bean实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法

8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessAfterInitialization()

9.Bean准备就绪,驻留在spring应用上下文

10.如果bean实现了DisposableBean接口,Spring将调用它的destroy()方法,同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用

 

Spring bean 容器的生命周期可以分为三个阶段:实例化、初始化和销毁。 1. 实例化阶段:在这个阶段,Spring 容器会根据配置信息创建 bean 的实例。根据配置的不同,Spring 可以通过构造函数实例化 bean,也可以通过工厂方法来创建实例。在这个阶段,Spring 只是创建了对象的实例,并没有进行属性注入或其他初始化操作。 2. 初始化阶段:在实例化后,Spring 容器会对 bean 进行初始化。这个阶段包括以下几个步骤: - 属性注入:Spring 容器会将配置的属性值注入到 bean 的属性中,可以通过 XML 配置或注解来完成属性注入。 - Aware 接口回调:如果 bean 实现了 Aware 接口,容器会调用相应的回调方法,让 bean容器的一些特定情况做出响应。 - 自定义初始化方法:如果在配置中指定了自定义的初始化方法,Spring 容器会调用该方法进行额外的初始化操作。 3. 销毁阶段:当 Spring 容器关闭时,会触发 bean 的销毁操作。销毁阶段包括以下几个步骤: - 实现 DisposableBean 接口:如果 bean 实现了 DisposableBean 接口,容器会调用其 destroy() 方法进行销毁操作。 - 自定义销毁方法:如果在配置中指定了自定义的销毁方法,Spring 容器会调用该方法进行额外的销毁操作。 需要注意的是,对于单例作用域的 bean,默认情况下 Spring 容器会管理其完整的生命周期,而对于原型作用域的 beanSpring 容器只负责创建和初始化,不会进行销毁操作,需要手动释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值