首页 > 其他分享 >SpringBean生命周期

SpringBean生命周期

时间:2023-03-12 17:23:17浏览次数:36  
标签:初始化 code 容器 Bean SpringBean bean 生命周期 Ioc

一般指的是 bean 在容器中创建 -初始化-销毁的过程,在这之前会先进行bean的定义 先定义,再初始化 定义:

    1. Resource定位,定位到配置XML或者注解
    2. BeanDefinition载入,将Resource定位到的bean的信息保存到Bean的定义(BeanDefinition中,此时并不会创建Bean实例
    3. BeanDefinition的注册,将BeanDefinition的信息发布到Spring Ioc容器中,此时仍旧没有对应的Bean实例创建
到这里,Bean就在Spring Ioc容器中被定义了,而没有初始化,也没有完成依赖注入 这里开始bean在容器中的生命周期,通过一系列的接口穿插管控bean的整个生命周期   构造(创建对象) 单实例:在容器启动的时候创建对象 多实例:在每次获取时创建对象   容器启动的时候会创建单例对象并对其初始化(非延迟加载的)   下面是Ioc容器对Bean 的初始化过程 org.springframework.beans.factory.BeanFactory; 中给出了整套初始化方法及标准顺序
  1. BeanNameAware's {@code setBeanName} 如果实现了,就执行该方法
  2. BeanClassLoaderAware's {@code setBeanClassLoader}
  3. BeanFactoryAware's {@code setBeanFactory}
  4. EnvironmentAware's {@code setEnvironment}
  5. EmbeddedValueResolverAware's {@code setEmbeddedValueResolver}
  6. ResourceLoaderAware's {@code setResourceLoader} (only applicable when running in an application context)
  7. ApplicationEventPublisherAware's {@code setApplicationEventPublisher} (only applicable when running in an application context)
  8. MessageSourceAware's {@code setMessageSource} (only applicable when running in an application context)
  9. ApplicationContextAware's {@code setApplicationContext} (only applicable when running in an application context)
  10. ServletContextAware's {@code setServletContext} (only applicable when running in a web application context)
一系列Awar接口:初始化前的预处理 操作  
  1. {@code postProcessBeforeInitialization} methods of BeanPostProcessors #进行预初始化
  2. InitializingBean's {@code afterPropertiesSet} #spring提供的初始化接口,可以覆写afterPropertiesSet方法来初始化
  3. a custom init-method definition #bean中自定义的初始化
  4. {@code postProcessAfterInitialization} methods of BeanPostProcessors #初始化后的后置处理器
此时就已经可以投入使用了   关闭 On shutdown of a bean factory, the following lifecycle methods apply:
  1. {@code postProcessBeforeDestruction} methods of DestructionAwareBeanPostProcessors 销毁前的后置处理
  2. DisposableBean's {@code destroy} #spring提供的销毁方法,覆写该接口的destroy方法来实现
  3. a custom destroy-method definition #bean中自定义的销毁方法
单实例:容器关闭的时候销毁 多实例:容器不会管理这个bean,不会自动调用他的销毁方法  

 

 

 

spring Ioc在执行了初始化和依赖注入后会执行一些步骤来完成初始化,我们能根据这来设置自定义初始化和销毁。 实现了相关接口才会在生命周期中调用它的方法 spring Ioc容器正常关闭时会调用一些步骤来关闭容器,释放资源。 spring Ioc容器的最低要求是实现BeanFactory接口,而非ApplicationContext接口,如果采用了非ApplicationContext子类创建Ioc容器,那么即使覆写了相应接口,也不会在生命周期中被调用。 当服务器正常关闭,或者遇到其他关闭spring Ioc容器的时间,它就会调用对应的方法完成Bean的销毁,步骤如下:
  • 如果bean实现了接口DisposableBean的destroy方法,那么就会调用它
  • 如果定义了自定义销毁方法,那么就会调用它
  • 如果两者都有,先执行实现的DisposableBean的destroy,再执行自定义的销毁方法
初始化和销毁方法,可以通过
  • xml的init-method 和 destroy-method指定
  • 注解@Bean来指定

 

  • JSR250 javax.annotation的注解@postCunstruct和@preDestroy
BeanPostProcessor接口针对的是所有的Bean,不需要每一个bean都来实现它,用一个Bean实现该接口,在Spring Ioc容器中定义它,就能对所有的Bean产生影响。

 

标签:初始化,code,容器,Bean,SpringBean,bean,生命周期,Ioc
From: https://www.cnblogs.com/deity-night/p/17208564.html

相关文章

  • 从vue生命周期中两个“不会保证”说起
    起因在mounted中使用ref获取一个节点中的子节点,有时会获取不到。vue2文档-生命周期文档中说明:mounted注意mounted不会保证所有的子组件也都被挂载完成。如果你希望......
  • Java基础之并发——线程的生命周期和状态
    Java线程在运行的生命周期中的指定时刻只可能处于下面6种不同状态的其中一个状态:NEW:初始状态,线程被创建出来但没有被调用start()。RUNNABLE:运行状态,线程被调用......
  • Spring:简述一下bean的生命周期吧?
    bean的生命周期是指它在ioc容器中从创建到销毁的整个过程。 <hr> 一、生命周期1、实例化,为对象分配内存。2、构造方法。3、属性注入,set注入。4......
  • vue生命周期以及如何将axios挂载到vue的原型链上
    生命周期组件的生命周期是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行 ......
  • MantisBT中文使用手册(四)—— Issue生命周期与工作流
    IssueIssue的创建方式Issue的生命周期是从它被创建的一刻开始的。创建Issue的方法一般有以下几种:MantisBT的Web界面——也就是用户登录MantisBT后报告Issue的地方。SO......
  • React课堂笔记3-生命周期
    一、组件component(续)1.1、组件的state1.1.1、componentWillUnmountcomponentWillUnmount() 会在组件卸载及销毁之前直接调用。在此方法中执行必要的清理操作,例如,清除t......
  • Spring的生命周期
    Spring概述Spring是一个轻量级的J2EE开源框架可以解决企业应用开发的复杂性Spring的核心部分:IOC和AOP特点方便解耦,简化开发AOP编程方便程序测试方便......
  • unity3D使用协程控制怪物的生命周期
    分析九个坑位要随机生成怪物,随机时间生成类似打地鼠协程(Coroutines)协程:协程是一个分部执行,遇到条件(yieldreturn语句)时会挂起,直到条件满足时才会被唤醒继续执行后面的......
  • Solon2 的 Bean 生命周期
    Solon框架的Bean是被容器托管的,所以它的生命周期只限定在容器内部:时机点说明补充AopContext::new()是在应用初始化时执行::new()AopContext::beanSca......
  • React学习笔记(二)—— JSX、组件与生命周期
    一、JSX1.1、什么是JSX?JSX=JavaScriptXML,这是React官方发明的一种JS语法(糖)概念:JSX是JavaScriptXML(HTML)的缩写,表示在JS代码中书写HTML结构设想如下变量声明:......