springbean生命周期通俗一点_java servlet生命周期

springbean生命周期通俗一点_java servlet生命周期一、springBean的生命周期1、启动spring容器,也就是创建beanFactory(bean工厂),一般用的是beanFactory的子类applicationcontext,applicationcontext比一般的beanFactory要多很多功能,比如aop、事件等。通过applicationcontext加载配置文件,或者利用注解的方式扫描将bean的配置信息加载到spring容器里面。2、加载之后,spring容器会将这些

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、springBean的生命周期

1、  启动spring容器,也就是创建beanFactory(bean工厂),
     一般用的是beanFactory的子类applicationcontext,
     applicationcontext比一般的beanFactory要多很多功能,比如aop、事件等。
     通过applicationcontext加载配置文件,或者利用注解的方式扫描将bean
     的配置信息加载到spring容器里面。

 2、  加载之后,spring容器会将这些配置信息(java bean的信息),封装成BeanDefinition对象
      BeanDefinition对象其实就是普通java对象之上再封装一层,
      赋予一些spring框架需要用到的属性,比如是否单例,是否懒加载等等。

3、  然后将这些BeanDefinition对象以key为beanName,
     值为BeanDefinition对象的形式存入到一个map里面,
     将这个map传入到spring beanfactory去进行springBean的实例化。
  
4、  传入到pring beanfactory之后,利用BeanFactoryPostProcessor接口这个扩展点
     去对BeanDefinition对象进行一些属性修改。

5、  开始循环BeanDefinition对象进行springBean的实例化,springBean的实例化也就
     是执行bean的构造方法(单例的Bean放入单例池中,但是此刻还未初始化),
     在执行实例化的前后,可以通过InstantiationAwareBeanPostProcessor扩展点
     (作用于所有bean)进行一些修改。

6、   spring bean实例化之后,就开始注入属性,
      首先注入自定义的属性,比如标注@autowrite的这些属性,
      再调用各种Aware接口扩展方法,注入属性(spring特有的属性),
      比如BeanNameAware.setBeanName,设置Bean的ID或者Name;

7、   初始化bean,对各项属性赋初始化值,,初始化前后执行BeanPostProcessor
      (作用于所有bean)扩展点方法,对bean进行修改。

      初始化前后除了BeanPostProcessor扩展点还有其他的扩展点,执行顺序如下:

        (1). 初始化前                	   postProcessBeforeInitialization()
        (2). 执行构造方法之后                执行 @PostConstruct 的方法
        (3). 所有属性赋初始化值之后           afterPropertiesSet()
        (4). 初始化时              	       配置文件中指定的 init-method 方法
        (5). 初始化后                	   postProcessAfterInitialization()

		先执行BeanPostProcessor扩展点的前置方法postProcessBeforeInitialization(),
		再执行bean本身的构造方法
		再执行@PostConstruct标注的方法
		所有属性赋值完成之后执行afterPropertiesSet()
		然后执行 配置文件或注解中指定的 init-method 方法
		最后执行BeanPostProcessor扩展点的后置方法postProcessAfterInitialization()

8、     此时已完成bean的初始化,在程序中就可以通过spring容器拿到这些初始化好的bean。

9、     随着容器销毁,springbean也会销毁,销毁前后也有一系列的扩展点。
  		销毁bean之前,执行@PreDestroy 的方法
	    销毁时,执行配置文件或注解中指定的 destroy-method 方法。


  		以上就是spring bean的整个生命周期

  		其实就是根据配置文件或注解信息,生成BeanDefinition,
  		循环BeanDefinition去实例化-》注入属性-》初始化-》销毁,在这4个阶段执行前后,
  		spring框架提供了一系列的扩展点。

二、springBean的各种扩展点

(1)、容器级扩展点(作用于所有bean):

	BeanFactoryPostProcessor接口:
	
	在循环初始化springbean之前,对BeanDefinition元数据做扩展处理
	
	InstantiationAwareBeanPostProcessor接口:
	
	在对象实例化前后扩展,作用于所有bean
	
	BeanPostProcessor接口:
	
	在对象初始化化前后扩展,作用于所有bean

(2)、Bean扩展点(作用于单个bean):

	Aware接口:
	
	springBean实例化并且注入自定义属性之后
	
	InitializingBean接口:
	
	springBean初始化时,执行构造方法结束,并且属性赋初始化值结束之后执行
	
	DiposableBean接口:
	
	springBean销毁之前执行。

(3)、Bean自身的方法

	包括了Bean本身调用的方法
	
	通过配置文件中<bean>的init-method和destroy-method指定的方法(或者用注解的方式)
	
	(4)、包括了AspectJWeavingEnabler, 
	 ConfigurationClassPostProcessor, 
	 CustomAutowireConfigurer等等非常有用的工厂后处理器接口的方法。
	 工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191732.html原文链接:https://javaforall.net

(0)
上一篇 2026年1月26日 下午2:22
下一篇 2026年1月26日 下午3:01


相关推荐

  • linux vi命令 退出不保存,linux vi保存退出命令(如何退出vi)

    linux vi命令 退出不保存,linux vi保存退出命令(如何退出vi)若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令:q!Vi放弃所作修改而直接退到shell下,则Vi在显示窗口的状态行给出提示信息:Fileexists(use!tooverride)此时,在末行模式下,。在末行模式下,若在用此命令退出Vi时,返回到shell;若当前编辑的文件没被修改过,输入命令:wqVi将先保存文件,输入命令:wVi保存当前编辑…

    2022年9月30日
    6
  • IDEA2021.1 安装教程

    IDEA2021.1 安装教程工欲善其事必先利其器。一、下载IDEA官方下载地址:https://www.jetbrains.com/zh-cn/idea/download/二、安装IDEA注:安装IDEA之前需要我们机器上有JDK环境!!!双击打开安装即可:三、IDEA快速入门双击打开IntelliJIDEA2021.1.1×64:1、使用IDEA创建一个普通javase项目。2、使用IDEA创建一个maven项目。.

    2022年6月15日
    171
  • 谈谈privoxy:关于广告过滤和自动代理切换

    谈谈privoxy:关于广告过滤和自动代理切换转载自品略图书馆 http www pinlue com article 2020 04 0206 031010213243 htmlprivoxy 广告过滤和自动代理切换最初用 Privoxy 是因为七星庐的文章强大的代理调度器代理 Privoxy 用作代理切换 后来顺便也用起它广告过滤的功能 能实现这两个功能的软件 插件很多 而且用起来往往比 privoxy 来的方便 比如 foxpro

    2025年6月8日
    7
  • minist 简介

    在机器学习入门的领域里,我们会用MNIST数据集来实验各种模型。MNIST里包含各种手写数字图片。也包含每张图片对应的标签,告诉我们这个数字几。(MNIST数据集来自美国国家标准与技术研究所,NationalInstituteofStandardsandTechnology(NIST)。训练集(trainingset)由来自250个不同人手写的数字构成,…

    2022年4月5日
    122
  • RabbitMQ的死信队列

    RabbitMQ的死信队列什么是死信在 RabbitMQ 中充当主角的就是消息 在不同场景下 消息会有不同地表现 死信就是消息在特定场景下的一种表现形式 这些场景包括 消息被拒绝访问 即 RabbitMQ 返回 nack 的信号时消息的 TTL 过期时消息队列达到最大长度消息不能入队时 上述场景经常产生死信 即消息在这些场景中时 被称为死信 什么是死信队列死信队列就是用于储存死信的消息队列 在死信队列中 有且只有死信构成 不会存在其余类型的消息 死信队列在 RabbitMQ 中并不会单独存在 往往死信队列都会绑

    2026年3月18日
    1
  • 服务器基础知识_服务器初学者入门

    服务器基础知识_服务器初学者入门定义:从广义上讲,服务器是指网络中能对其它机器提供某些服务的计算机系统(如果一个PC对外提供ftp服务,也可以叫服务器)。从狭义上讲,服务器是专指某些高性能计算机,能通过网络,对外提供服务。相对于普通

    2022年8月1日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号