• Spring系列- - -spring bean生命周期


     ✅作者简介:

                全栈领域新星创作者,阿里云专家博主,掘金签约后端评审团成员

    💕推荐学习专栏:

                                 Spring系列

                                 Spring Boot 系列

                                  秋招面试题

                                 再次渡入繁世,人潮汹涌,眼里茫然,信仰永恒,皆为华夏   

    目录

    Spring篇

    11、解释一下spring bean的生命周期

    12、解释Spring支持的几种bean的作用域?

     本期分享到此为止,关注博主不迷路,叶秋学长带你上高速~~


    Spring篇

    11、解释一下spring bean的生命周期

    首先说一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy;

    Spring上下文中的Bean生命周期也类似,如下:

    (1)实例化Bean:

    对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。

    (2)设置对象属性(依赖注入):

    实例化后的对象被封装在BeanWrapper对象中,紧接着,Spring根据BeanDefinition中的信息 以及 通过BeanWrapper提供的设置属性的接口完成依赖注入。

    (3)处理Aware接口:

    接着,Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给Bean:

    ①如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(StringbeanId)方法,此处传递的就是Spring配置文件中Bean的id值;

    ②如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,传递的是Spring工厂自身。

    ③如果这个Bean已经实现了ApplicationContextAware接口,会调用

    setApplicationContext(ApplicationContext)方法,传入Spring上下文;

    (4)BeanPostProcessor:

    如果想对Bean进行一些自定义的处理,那么可以让Bean实现了BeanPostProcessor接口,那将会调用postProcessBeforeInitialization(Object obj, String s)方法。

    (5)InitializingBean 与 init-method:

    如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。

    (6)如果这个Bean实现了BeanPostProcessor接口,将会调用

    postProcessAfterInitialization(Object obj, String s)方法;由于这个方法是在Bean初始化结束时调用的,所以可以被应用于内存或缓存技术;

    以上几个步骤完成后,Bean就已经被正确创建了,之后就可以使用这个Bean了。

    (7)DisposableBean:

    当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法;

    (8)destroy-method:

    最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

    12、解释Spring支持的几种bean的作用域?

    Spring容器中的bean可以分为5个范围:

    (1)singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。

    (2)prototype:为每一个bean请求提供一个实例。

    (3)request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

    (4)session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,

    bean会随之失效。

    (5)global-session:全局作用域,global-session和Portlet应用相关。当你的应用部署在Portlet

    容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。

     本期分享到此为止,关注博主不迷路,叶秋学长带你上高速~~

  • 相关阅读:
    hithesis部署和VSCode远程编辑tex文件
    C++ 基础与深度分析 Chapter11 类与面向对象编程(结构体与对象聚合、成员函数、访问限定符与友元)
    怪怪815网站
    [python][flask] Flask 图片上传与下载例子(支持漂亮的拖拽上传)
    linux日志文件删除
    【小白专用】安装Apache2.4+ 安装PHP8.2+ php与sql server 2008 r2连接测试教程
    VBM计算操作过程记录
    Ai语音机器人系统语音识别达到了什么水准
    Synchronized
    dreamweaver网页设计作业制作 学生个人网页猫眼电影 WEB静态网页作业模板 大学生个人主页博客网页代码 dw个人网页作业成品
  • 原文地址:https://blog.csdn.net/m0_63722685/article/details/126908130