Spring容器、Bean生命周期

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.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 容器会管理其完整的生命周期,而对于原型作用域的 bean,Spring 容器只负责创建和初始化,不会进行销毁操作,需要手动释放资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值