Spring容器、Bean生命周期

本文围绕Spring展开,介绍了Spring容器是框架核心,负责管理应用对象的整个生命周期,使用DI管理组件并创建关联。还提到Spring自带多种容器实现,重点介绍了常见的应用上下文,以及Bean在Spring容器中的生命周期,可进行个性化定制。

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

Spring容器、Bean生命周期

在基于Spring的应用中,你的应用对象生存于Spring容器中。Spring容器负责创建对象、封装它们、配置它们并管理它们的整个生命周期,从生存到死亡(在这里可能就是new到finalize)。

容器是Spring框架的核心。Spring容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联。

Spring自带多个容器实现,可以归纳为两种不同的类型。

  • bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是最单的容器,提供基本的DI支持。
  • 应用上下文(由org.springframework.context.ApplicationContext接口定义)基于BeanFactory构建,并提供应用框架级别的服务,例如从属性文件解析文本信息以及发布应用事件给感兴趣的事件监听者。

1. 常见的应用上下文

Spring自带了多种类型的应用上下文。常见的应用上下文有:

ApplicationContext描述
AnnotationConfigApplicationContext从一个或多个基于Java的配置勒种加载Spring应用上下文
AnnotationConfigWebApplicationContext从一个或多个基于Java的配置类中加载Spring Web应用上下文
ClassPathXmlApplicationContext从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源
FileSystemXmlApplicationContext从文件系统下的一个或多个XML配置文件中加载上下文定义
XmlWebApplicationContext从Web应用下的一个或多个XML配置文件中加载上下文定义

2. Bean生命周期

bean在Spring容器中从创建到销毁经历了若干阶段,每一阶段都可以针对Spring如何管理bean进行个性化定制

阶段描述
1. 实例化Spring对Bean进行实例化
2. 填充属性Spring将值和bean的引用注入到bean对应的属性中
3. 调用BeanNameAware的setBeanName()方法如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法
4. 调用BeanFactoryAware的setBeanFactory()方法如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
5. 调用ApplicationContextAware的setApplicationContext()方法如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来
6. 调用BeanPostProcessor的与初始化方法如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()方法
7. 调用InitializingBean的afterPropertiesSet()方法如果bean实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。
8. 调用自定义的初始化方法如果bean使用init-method声明了初始化方法,该方法也会被调用
9. 调用BeanPostProcessor的初始化后方法如果bean实现了BeanPostProcessor接口,Spring将调用他们的postProcessAfterInitaliaztion()方法
— 容器初始化完毕 —
— bean正常调用 —
— 容器关闭 —
10. 调用DisposableBean的destroy()方法如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。
11. 调用自定义的销毁方法如果bean使用destory-method声明了销毁方法,该方法也会被调用。

重点:

  1. About org.springframework.beans.factory.config.BeanPostProcessor

ApplicationContexts 可以自动检测bean定义中的BeanPostProcessor bean,并将它们应用于随后创建的任何bean。

Javadoc

Factory hook that allows for custom modification of new bean instances, e.g. checking for marker interfaces or wrapping them with proxies.
ApplicationContexts can autodetect BeanPostProcessor beans in their bean definitions and apply them to any beans subsequently created. Plain bean factories allow for programmatic registration of post-processors, applying to all beans created through this factory.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值