每日八股day25

本系列帖子为鼠鼠复习八股巩固记忆和个人理解所写,如有错误纯属本人实力不佳,欢迎各位大佬阅读指正

1.Bean的生命周期?

实例化Instantiation,Spring根据BeanDefinition,利用反射创建Bean原始对象。

属性填充Populate Bean,自动扫描依赖,通过反射完成依赖注入(DI),给对象属性赋值。

Aware接口回调,容器检测Bean是否实现各类Aware接口,注入容器相关资源。

BeanPostProcessor前置处理postProcessBeforeInitialization,执行后置处理器的初始化前置方法,可对Bean进行包装修改。

初始化Initialization

BeanPostProcessor后置处理postProcessAfterInitialization,初始化完成后执行,AOP代理就是在这里生成代理对象。

容器关闭,销毁Destruction

2.Bean是否单例?

默认单例,但不是全部都是单例,由scope作用域决定。

作用域:

singleton,单例整个IOC容器中只创建一个Bean实例,容器启动时创建,存入单例池复用。

prototype,多例每次getBean()都会新建全新对象,容器不管理它的销毁,适用于状态非常瞬时的Bean。

request,一次HTTP请求创建一个实例,仅在Spring Web应用程序有效 ,适用于web应用中需求局部性Bean。

session,同一个会话一个实例,该Bean实例在用户会话范围内共享,尽在Spring web应用中有效,适用于用户会话相关Bean。

globalSession,Protlet相关,极少使用。

application,整个web应用全局共享,尽在Spring web应用中有效,适用于应用程序范围内共享的Bean。

webSocket,在webSocket范围内只存在一个Bean实例,仅在支持WebSocket的应用程序中有效,适用于在WebSocket会话范围内共享的Bean。

custom scopes,Spring允许开发者自定义作用域,通过实现Scope接口来创建新的Bean作用域。

追问:Bean的单例和非单例,生命周期是否一样?

创建阶段生命周期一致,销毁阶段完全不同。

销毁阶段:

单例:容器启动时创建,存入单例池,容器关闭时,IOC容器自动触发销毁方法。

多例:每次getBean都会创建实例,Spring容器不负责维护prototype Bean的销毁工作,容器关闭时不会主动调用它的销毁回调,资源释放需要业务自己手动处理。

相关推荐
步行cgn4 小时前
@Configuration 详解:Spring 配置类的核心注解
java·后端·spring
卓怡学长11 小时前
w210基于springboot反诈平台设计与实现
java·spring boot·spring·intellij-idea
大模型码小白14 小时前
ChatGPT 的回答也能被结构化抓取?AI Bot Scraper 对比测评
服务器·开发语言·数据库·人工智能·spring·chatgpt
1001101_QIA15 小时前
从 CPU 到 GPU:高速缓存、指令并行与 CUDA 执行原理入门
java·后端·spring
卓怡学长15 小时前
w156一周穿搭App的设计与实现
java·spring boot·spring·maven·intellij-idea
杰克尼15 小时前
同城拼车项目面试问题_01
spring·面试·职场和发展
Java成神之路-16 小时前
基于 Spring AI+MCP 协议实现大模型调用本地自定义工具
java·spring·springaialibaba
SQL-First布道者17 小时前
我为什么把 MyBatis 从项目中删了?
java·spring·tomcat·mybatis·mybatis plus·spring jdbc
QCodingDev18 小时前
Spring AI 2.0企业级RAG实战:引用校验、无依据拒答与知识治理怎么做?
java·人工智能·spring·ai
名字还没想好☜18 小时前
Java 用 LinkedHashMap 三行实现 LRU 缓存:accessOrder、removeEldestEntry 与线程安全
java·后端·安全·spring·缓存