当前位置: 首页 > backend >正文

java面试复习(spring相关系列)

spring中bean的生命周期

Bean的定义与实例化:Spring通过xml或者@Compent,@Service等注解进行bean的定义;Spring 容器根据定义创建 Bean 实例。对于无参构造函数的 Bean,Spring 通过反射直接调用构造函数进行实例化。如果 Bean 有多个构造函数,Spring 会选择参数匹配度最高的构造函数

源码关联:AbstractAutowireCapableBeanFactory#createBeanInstance

属性注入:Bean 实例化后,Spring 容器会对 Bean 的属性进行依赖注入。这可以通过 XML 配置的<property>标签或注解(如@Autowired@Resource)来实现。

源码关联:AbstractAutowireCapableBeanFactory#populateBean

初始化前处理:在属性注入完成后,Spring 会调用实现了BeanNameAwareBeanClassLoaderAwareBeanFactoryAware接口的方法。

BeanNameAware:setBeanName(String name)方法被调用,Bean 可以获取自身在 Spring 容器中的名称

BeanClassLoaderAware:setBeanClassLoader(ClassLoader classLoader)方法被调用,Bean 可以获取加载自身的类加载器。

BeanFactoryAware:setBeanFactory(BeanFactory beanFactory)方法被调用,Bean 可以获取所属的 Spring BeanFactory。

源码关联:AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization

初始化:自定义初始化方法:可以通过init - method属性在 XML 配置中指定初始化方法,或使用@PostConstruct注解在方法上定义初始化逻辑。InitializingBean 接口:如果 Bean 实现了InitializingBean接口,其afterPropertiesSet()方法会在属性注入后被调用,用于执行初始化操作。

源码关联:AbstractAutowireCapableBeanFactory#invokeInitMethods

初始化后处理:在Bean初始化后进行增强处理(如生成代理对象),典型应用spring Aop代理

源码关联:AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization

使用阶段:Bean已完全初始化,可被应用程序获取并使用。

销毁阶段:释放Bean占用的资源(如关闭数据库连接、释放缓存)

  调用顺序:

  1. 执行@PreDestroy标注的方法。
  2. 调用DisposableBean#destroy()接口方法。
  3. 调用XML配置或@Bean注解中指定的destroy-method方法。

spring在bean对象初始化过程中提供了很多扩展点

http://www.xdnf.cn/news/16339.html

相关文章:

  • 【机器学习-2】 | 决策树算法基础/信息熵
  • 【RocketMQ】一分钟了解RocketMQ
  • Earth靶机攻略
  • linux线程概念和控制
  • 字符串缓冲区和正则表达式
  • Mingw 与MSYS2 与Cygwin区别
  • Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
  • 基于深度学习的胸部 X 光图像肺炎分类系统(七)
  • 凝思系统6.0.80安装chorme,亲测可用
  • 如何创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT)
  • mount: /mnt/sd: wrong fs type, bad option, bad superblock on /dev/mmcblk1
  • FitCoach AI:基于React+CloudBase的智能健身教练应用开发全解析
  • 缓存一致性:从单核到异构多核的演进之路
  • Android Jetpack 组件库 ->WorkManager
  • Linux系统架构核心全景详解
  • Unity 实现帧率(FPS)显示功能
  • 11Linux文件压缩与链接实战技巧
  • 深入解析YARN中的FairScheduler与CapacityScheduler:资源分配策略的核心区别
  • Python 数据分析(二):Matplotlib 绘图
  • 小白成长之路-部署Zabbix7(二)
  • 【GoLang#3】:数据结构(切片 | map 映射)
  • Linux726 raid0,raid1,raid5;raid 创建、保存、停止、删除
  • KubeKey安装KubeSphere、部署应用实践问题总结
  • 零基础学习性能测试第四章:从0到1学会编写性能测试报告
  • 【Spring AI】SiliconFlow-硅基流动
  • C# 位运算及应用
  • GStreamer中Element(元素)
  • 面试150 回文数
  • python---字典(dict)
  • 从压缩到加水印,如何实现一站式图片处理