Bean完整的生命周期从Spring容器的着手实例化Bean 开始,知道最终销毁Bean。这当中经过了许多的关键点,每个关键点都涉及特定的方法调用,可以将这些方法大致划分为三类:
[Bean自身的方法:如调用Bean构造函数实例化Bean,调用Setter设置Bean的属性以及通过的init-method 和 destroy-method所指定的方法;
Bean级生命周期接口方法:如BeanNameAware,BeanFactoryAware,InitializingBean和DisposableBean,这些接口由Bean直接实现;
容器级生命周期接口方法:上例用InstantiationAwareBeanPostProcessorAdapter和BeanPostProcessor这两个接口实现,一般称他们的实现类为后处理器。一般不由Bean直接实现,它们独立于Bean,实现类以容器附加装置的形式注册到Spring容器中。当Spring创建任何的Bean时,后处理器都会发生作用,所以这些后处理器是全局性的。
具体的生命周期即从着手实例化开始到销毁的具体步骤:
1.如果注册了InstantiationAwareBeanPostProcessor后处理器,执行InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation()方法;
2.根据配置情况调用Bean构造函数或工厂方法实例化Bean;
3.如果注册了InstantiationAwareBeanPostProcessor后处理器,执行InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation()方法;
4.如果配置了属性,在设置每个属性前调用InstantiationAwareBeanPostProcessor.postProcessPropertyValues()方法;
5.调用Bean的属性设置方法setXxx()方法设置属性值;
6.如果Bean实现了BeanNameAware.setBeanName()方法,将配置文件中该Bean对应的名称设置到Bean中通过setBeanName()方法;
7.如果Bean实现了BeanFactoryAware.setBeanFactory()方法,将调用setBeanFactory()接口的方法,将BeanFactory容器实例设置到Bean中;
8.调用BeanPostProcessor.postProcessBeforeInitialization(),入参是当前正在处理的Bean,beanName是当前Bean的配置名,返回的对象为加工处理后的Bean,可以在此方法中对Bean进行修改;
9.如果Bean实现了调用InitializingBean,调用InitializingBean.afterPropertiesSet()方法;
10.执行在通过init-method属性定义的初始化方法;
11.调用BeanPostProcessor.postProcessAfterInitialization()方法;
12.如果在中指定Bean的作用范围为scope="prototype",将Bean返回给调用者,调用者负责Bean后续生命管理,Spring不再管理这些Bean的生命周期。如果为Scope="singleton",则将Bean放入Spring IoC容器的缓存池,并将Bean引用返回给调用者,Spring继续对这些Bean进行后续的生命管理。
13.对于scope="singleton"的Bean,当容器关闭时,调用DisposableBean.destory()方法;
14.调用中destory-method方法。
Bean在Spring应用上下文的生命周期与其在BeanFactory中生命周期只有一点不同:
如果Bean中实现了ApplicationContextAware接口,则会调用setApplicationContext方法
分享到:
相关推荐
BeanFactory的Bean的生命周期流程图
Spring的生命周期是指实例化Bean时所经历的一系列阶段,即通过getBean()获取bean对象及设置对象属性时,Spring框架做了哪些事。...本文分别对 BeanFactory 和 ApplicationContext 中的生命周期进行分析。
BeanFactory 和 ApplicationContext 有什么区别 > ...BeanFactory 还包含了 bean 生命周期的控制,调用客户端的 初始化方法(initialization methods)和销毁方法(destruction methods)。 > 从表面上看,appli
BeanFactory 还包含了 bean 生命周期的控制,调用客户端的初始 化方法(initialization methods)和销毁方法(destruction methods)。 > 从表面上看,application context 如同 bean factory 一样具有 bean 定义、...
BeanFactory是Spring框架的心脏,作为Bean容器的根接口,它采用工厂模式来管理Bean的生命周期。BeanDefinition则详细描述了bean的配置信息,如类名、作用域、依赖等,为Bean的创建和管理提供了蓝图。 除此之外,文档...
摘录了spring的核心逻辑,代码极度简化,保留spring的核心功能,如IoC和AOP,资源加载器,事件监听器,类型转换,容器扩展点,bean生命周期和作用域,应用某些等核心功能。 如果本项目能帮助到你,请给个STAR,谢谢...
BeanFactory管理Bean(组件)的生命周期 15 Bean的定义 16 Bean的之前初始化 19 Bean的准备就绪(Ready)状态 21 Bean的销毁 21 ApplicationContext 21 Spring的AOP框架 21 Spring的数据层访问 22 Spring的声明式...
BeanFactory管理Bean(组件)的生命周期 15 Bean的定义 16 Bean的之前初始化 19 Bean的准备就绪(Ready)状态 21 Bean的销毁 21 ApplicationContext 21 Spring的AOP框架 21 Spring的数据层访问 22 Spring的...
请解释Spring Bean的生命周期 Spring Bean的作用域之间有什么区别 什么是Spring inner beans Spring框架中的单例Beans是线程安全的么 请举例说明如何在Spring中注入一个Java Collection 如何向Spring Bean中注入一个...
27. 解释 Spring 框架中 bean 的生命周期 28. 哪些是重要的 bean 生命周期方法? 你能重载它们吗? 29. 什么是 Spring 的内部 bean? 30. 在 Spring 中如何注入一个 java 集合? 31. 什么是 bean 装配? 32. 什么是...
Bean生命周期 3 Java反射 4 beanfactory和applicationcontext 5 类装载器ClassLoader 6 Spring aop 原理 6 Aop代理 7 Spring 事物 10 数据库锁 12 ThreadLocal 13 Spring TaskExecutor线程池 16
10、请解释 Spring Bean 的生命周期? 11、Spring Bean 的作用域之间有什么区别? 12、什么是 Spring inner beans? 13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java ...
10、请解释 Spring Bean 的生命周期? 11、Spring Bean 的作用域之间有什么区别? 12、什么是 Spring inner beans? 13、Spring 框架中的单例 Beans 是线程安全的么? 14、请举例说明如何在 Spring 中注入一个 Java ...
提供了Spring容器的支持,扩展了BeanFactory,提供了Spring中Bean生命周期的支持,在bean创建完成之后, 也是由该模块负责来维护bean和bean之间的依赖关系。常用的ApplicationContext核心接口也是该模块中所支持的;...
bean的生命周期,详细看上面 SpringBoot自动装配的过程的原理: spring的缓存; spring是如何解决的循环依赖; BeanFactory和FactoryBean有什么区别; Spring中用到的设计模式; SPI 机制(Java SPI 实际上是“基于...
3.5.1 BeanFactory中Bean的生命周期 3.5.2 ApplicationContext中Bean的生命周期 3.6 小结 第4章 在IoC容器中装配Bean 4.1 Spring配置概述 4.1.1 Spring容器高层视图 4.1.2 基于XML的配置 4.2 Bean基本配置 4.2.1 ...
3.5.1 BeanFactory中Bean的生命周期 3.5.2 ApplicationContext中Bean的生命周期 3.6 小结 第4章 在IoC容器中装配Bean 4.1 Spring配置概述 4.1.1 Spring容器高层视图 4.1.2 基于XML的配置 4.2 Bean基本配置 4.2.1 ...
SSM源码分析课程简介: ...Spring Bean的生命周期,Spring循环依赖等等问题。课程讲解细致,一行一行带你读懂代码,一行一行调试源码,彻彻底底明明白白真正理解MyBatis、Spring、SpringMVC框架的核心实现源码;
199 11.5.1 JMS 200 11.5.2 消息驱动Bean的生命周期 202 11.5.3 创建消息驱动Bean 202 11.6 实体Bean 203 11.6.1 实体Bean的特性 204 11.6.2 实体Bean的分类及组成 204 11.6.3 EJB 3.0中的实体Bean 206 11.7 EJB事务...
(八)Bean的细节:生命周期 (九)DI的概念和作用 (十)构造函数注入 (十一)set方法注入 (十二)注入复杂类型数据 (十三)业务层实现类调用持久层的方法 (一)IOC的概念和作用 IOC:Inversion of Control,是控制反转的意思...