每日八股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的销毁工作,容器关闭时不会主动调用它的销毁回调,资源释放需要业务自己手动处理。

相关推荐
后端LV3 小时前
一个注解不用写,给你的 Spring Boot 接口加上限流、日志、指标和钉钉告警
spring
卓怡学长4 小时前
w202springboot基于B_S架构的图书信息管理系统
java·spring boot·spring·intellij-idea
景熙55234 小时前
JDBC 详解:从原理到实战(含完整可运行 Demo)
java·spring·tomcat·mybatis·jdbc
程序猿乐锅5 小时前
一文讲透缓存穿透、击穿和雪崩
java·redis·spring·缓存·mybatis
程序猿乐锅5 小时前
【黑马点评 | 第七篇】Redis 分布式锁的两种实现
java·数据库·redis·分布式·spring·缓存
步行cgn7 小时前
Spring 负责注入的注解详解
java·sql·spring
程序猿乐锅7 小时前
【黑马点评 | 第九篇】秒杀优化-异步实现
java·spring boot·redis·后端·spring·中间件·mybatis
Wx-bishekaifayuan8 小时前
springboot户外登山社交小程序19787-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·django·课程设计
Wx-bishekaifayuan13 小时前
springboot生活商城系统21035-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·golang·课程设计
卓怡学长14 小时前
w206基于SpringBoot的社区团购小程序设计与实现
java·spring boot·spring·intellij-idea