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生命周期(简单易懂)相关推荐

  1. Spring框架:三种Spring Bean生命周期技术

    当使用术语"生命周期"时,Spring的家伙指的是您的bean的构造和破坏,通常这与Spring Context的构造和破坏有关. 在某些情况下,Bean生命周期的管理不是一件容易 ...

  2. Spring Bean 生命周期之“我从哪里来”?懂得这个很重要

    Spring bean 的生命周期很容易理解.实例化 bean 时,可能需要执行一些初始化以使其进入可用 (Ready for Use)状态.类似地,当不再需要 bean 并将其从容器中移除时,可能需 ...

  3. Spring5源码 - 07 Spring Bean 生命周期流程 源码解读02

    文章目录 Pre 通俗流程 finishBeanFactoryInitialization Pre Spring5源码 - 06 Spring Bean 生命周期流程 概述 01 接上文 通俗流程 下 ...

  4. Spring Bean默认配置为单实例 Spring Bean生命周期

    2019独角兽企业重金招聘Python工程师标准>>> Spring 的Bean默认的是单例的. 如果不想单例需要如下配置: <bean id="user" ...

  5. Spring Bean生命周期: Bean的实例化

    [Spring Bean 生命周期系列]传送门 1.Spring Bean生命周期: Bean元信息的配置与解析阶段 2.Spring Bean生命周期: Bean的注册 3.Spring Bean生 ...

  6. Spring Bean生命周期过程

    Spring Bean生命周期过程 Spring Bean生命周期指的是Bean加载Spring容器的过程,单例的Bean与多例的Bean加载过程是不一样的.这里指的是单例Bean的加载过程. 图:S ...

  7. Spring Bean生命周期:Bean的初始化阶段

    [Spring Bean 生命周期系列]传送门 1.Spring Bean生命周期: Bean元信息的配置与解析阶段 2.Spring Bean生命周期: Bean的注册 3.Spring Bean生 ...

  8. spring bean生命周期_Spring中bean的生命周期和扩展点有哪些?

    前言 今天和大家分享一下Spring中Bean的生命周期的一些知识.先来说一下什么是生命周期吧,生命周期从其语义上理解就是一个对象从产生到销毁的整个过程,之所以把这个过程称为生命周期是因为其就像一个生 ...

  9. Spring Bean生命周期,就像人的一生

    这篇我们来看一看Spring中Bean的生命周期,我发现,和人的一生真的很像. 1 简单说说IoC和Bean IoC,控制反转,想必大家都知道,所谓的控制反转,就是把new对象的权利交给容器,所有的对 ...

  10. Spring5源码 - 06 Spring Bean 生命周期流程 概述 01

    文章目录 Bean生命周期概述 Demo finishBeanFactoryInitialization(beanFactory) 核心流程 Bean生命周期概述 说到Spring Bean的生命周期 ...

最新文章

  1. JAVA学习day05
  2. 在asp.net 中应用POST传递和接收XML文件以及参数.
  3. 【本人秃顶程序员】深入理解Java——ConcurrentHashMap源码的分析(JDK1.8)
  4. [android] AndroidManifest.xml - 【 manifest - permission】
  5. (45)System Verilog 类中变量随机激励约束语法
  6. 四周年了,谈谈一个程序员的职场心得
  7. HUSTOJ平台的搭建
  8. vue axios封装
  9. 存储基础知识 - 网络存储主要技术
  10. FL Studio20.9最新中文fl水果编曲软件
  11. 数据库表历史数据备份(定时任务)
  12. React之Redux
  13. php getimagesize svg,getimagesize
  14. 年轻人,劝你不要做前端
  15. 工作描述的介绍|如何写工作描述
  16. 关于netty的@Sharable注解含义,你可bie瞎说了
  17. 终极单词index 排序 G-H
  18. 工程师如何拥抱数字化转型?
  19. 数据分析-描述数据方法
  20. 51单片机+ESP8266实现手机控制单片机(点亮LED灯)

热门文章

  1. vue3-proxy
  2. php js 美国时间转换,洛杉矶时间换算(世界时间换算器在线)
  3. Java图像识别技术:Test4J
  4. 学习笔记 JavaScript ES6 声明方式const(二)
  5. 苹果电脑如何正确断网?Mac电脑断网方法
  6. 开发QQ桌球瞄准器(3):绘制瞄准线及母球
  7. 内存free和available区别
  8. 在线思维导图制作技巧汇总:超简单思维导图绘制方法
  9. npm link详解
  10. 剑三 服务器状态查询,数据互通全面启动_剑侠情缘网络版叁_金山游戏官方网站_金山逍遥Xoyo.com...