Spring Bean生命周期(简单易懂)
Java中的对象不一定是Spring IOC中的Bean,Spring IOC中的Bean一定是Java对象
Bean默认为Singleton(单例),Bean的创建与销毁都归由Spring IOC管理(prototype(原型/多例)除外)
一个对象转为Bean并由Spring IOC管理的过程如下,即一个Bean的生命周期如下
如图所示:
如果简单来讲,笼统概括的话就四步:
1.实例化
2.设置属性值
3.初始化
4.销毁
但是详细来说,会有很多细节需要注意,例如
1.第六步和第八七步之间会插入一个@PostConstruct方法
2.一个方式的多种实现,先后顺序的问题,如在bean销毁前的调用发放分为三种实现(注解,实现接口中的方法,xml中bean标签配置),三者的先后顺序为 注解 > 接口方法 > bean标签配置
代码示例:
Bean类:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;@Component(value = "testBean")
public class TestBean implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean, DisposableBean {@Overridepublic void setBeanName(String s) {System.out.println("设置bean的Id........");}@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {System.out.println("管理我的beanFactory......");}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {System.out.println("高级容器接口:applicationContext.......");}@PostConstructpublic void postConstructMethod(){System.out.println("postConstructMethod.......");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("InitializingBean的afterPropertiesSet方法.......");}@PreDestroyprivate void preDestroyMethod(){System.out.println("preDestroyMethod........");}@Overridepublic void destroy() throws Exception {System.out.println("DisposableBean的destroy方法.........");}
BeanPostProcessor接口实现类:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;@Component
public class MyBeanPostProcess implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if("testBean".equalsIgnoreCase(beanName)){System.out.println("MyBeanPostProcess--before方法.......");}return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if("testBean".equalsIgnoreCase(beanName)){System.out.println("MyBeanPostProcess--after方法.......");}return bean;}
}
以上便是自己学习过程中的思想心得,欢迎各路大神前来指导讨论
Spring Bean生命周期(简单易懂)相关推荐
- Spring框架:三种Spring Bean生命周期技术
当使用术语"生命周期"时,Spring的家伙指的是您的bean的构造和破坏,通常这与Spring Context的构造和破坏有关. 在某些情况下,Bean生命周期的管理不是一件容易 ...
- Spring Bean 生命周期之“我从哪里来”?懂得这个很重要
Spring bean 的生命周期很容易理解.实例化 bean 时,可能需要执行一些初始化以使其进入可用 (Ready for Use)状态.类似地,当不再需要 bean 并将其从容器中移除时,可能需 ...
- Spring5源码 - 07 Spring Bean 生命周期流程 源码解读02
文章目录 Pre 通俗流程 finishBeanFactoryInitialization Pre Spring5源码 - 06 Spring Bean 生命周期流程 概述 01 接上文 通俗流程 下 ...
- Spring Bean默认配置为单实例 Spring Bean生命周期
2019独角兽企业重金招聘Python工程师标准>>> Spring 的Bean默认的是单例的. 如果不想单例需要如下配置: <bean id="user" ...
- Spring Bean生命周期: Bean的实例化
[Spring Bean 生命周期系列]传送门 1.Spring Bean生命周期: Bean元信息的配置与解析阶段 2.Spring Bean生命周期: Bean的注册 3.Spring Bean生 ...
- Spring Bean生命周期过程
Spring Bean生命周期过程 Spring Bean生命周期指的是Bean加载Spring容器的过程,单例的Bean与多例的Bean加载过程是不一样的.这里指的是单例Bean的加载过程. 图:S ...
- Spring Bean生命周期:Bean的初始化阶段
[Spring Bean 生命周期系列]传送门 1.Spring Bean生命周期: Bean元信息的配置与解析阶段 2.Spring Bean生命周期: Bean的注册 3.Spring Bean生 ...
- spring bean生命周期_Spring中bean的生命周期和扩展点有哪些?
前言 今天和大家分享一下Spring中Bean的生命周期的一些知识.先来说一下什么是生命周期吧,生命周期从其语义上理解就是一个对象从产生到销毁的整个过程,之所以把这个过程称为生命周期是因为其就像一个生 ...
- Spring Bean生命周期,就像人的一生
这篇我们来看一看Spring中Bean的生命周期,我发现,和人的一生真的很像. 1 简单说说IoC和Bean IoC,控制反转,想必大家都知道,所谓的控制反转,就是把new对象的权利交给容器,所有的对 ...
- Spring5源码 - 06 Spring Bean 生命周期流程 概述 01
文章目录 Bean生命周期概述 Demo finishBeanFactoryInitialization(beanFactory) 核心流程 Bean生命周期概述 说到Spring Bean的生命周期 ...
最新文章
- JAVA学习day05
- 在asp.net 中应用POST传递和接收XML文件以及参数.
- 【本人秃顶程序员】深入理解Java——ConcurrentHashMap源码的分析(JDK1.8)
- [android] AndroidManifest.xml - 【 manifest - permission】
- (45)System Verilog 类中变量随机激励约束语法
- 四周年了,谈谈一个程序员的职场心得
- HUSTOJ平台的搭建
- vue axios封装
- 存储基础知识 - 网络存储主要技术
- FL Studio20.9最新中文fl水果编曲软件
- 数据库表历史数据备份(定时任务)
- React之Redux
- php getimagesize svg,getimagesize
- 年轻人,劝你不要做前端
- 工作描述的介绍|如何写工作描述
- 关于netty的@Sharable注解含义,你可bie瞎说了
- 终极单词index 排序 G-H
- 工程师如何拥抱数字化转型?
- 数据分析-描述数据方法
- 51单片机+ESP8266实现手机控制单片机(点亮LED灯)
热门文章
- vue3-proxy
- php js 美国时间转换,洛杉矶时间换算(世界时间换算器在线)
- Java图像识别技术:Test4J
- 学习笔记 JavaScript ES6 声明方式const(二)
- 苹果电脑如何正确断网?Mac电脑断网方法
- 开发QQ桌球瞄准器(3):绘制瞄准线及母球
- 内存free和available区别
- 在线思维导图制作技巧汇总:超简单思维导图绘制方法
- npm link详解
- 剑三 服务器状态查询,数据互通全面启动_剑侠情缘网络版叁_金山游戏官方网站_金山逍遥Xoyo.com...