Spring常见问题复习

############Spring#############
Bean的生命周期是什么?
BeanFactory和FactoryBean的区别?
ApplicationContext和BeanFactory的区别?
BeanFactoryAware注解,还有什么其它的Aware注解
BeanFactoryAware方法和@Bean注解的方法执行顺序

问题:Aware和@Bean

  1. 实例化 Bean @Bean 方法执行,返回 Bean 对象
    Spring 会在解析配置类阶段(ConfigurationClassPostProcessor)执行这个方法(@Bean的方法),返回一个 Bean 实例
  2. 属性注入(依赖注入) 注入 @Autowired 字段或构造函数参数
  3. Aware 回调 执行 BeanNameAware, BeanFactoryAware, ApplicationContextAware 等
  4. 初始化回调 @PostConstruct / InitializingBean.afterPropertiesSet()
  5. 完成初始化 Bean 完成创建,交由容器使用

问题:@PostConstruct / InitializingBean.afterPropertiesSet()
特性 @PostConstruct InitializingBean.afterPropertiesSet()
所属范畴 JSR-250 标准注解 Spring 特有接口
写法简洁 ✅ 是,注解方式,方法无参数 ❌ 否,需实现接口,覆盖方法
执行时机 属性注入完成后 属性注入完成后
适合多个方法初始化? ✅ 支持多个 @PostConstruct 方法 ❌ 只能有一个 afterPropertiesSet() 方法
推荐程度 ✅ 推荐,优雅简洁 ⚠️ 次选,适合框架或基础设施类使用
Bean 生命周期参与顺序位置 执行在 Aware 接口回调之后 执行在 Aware 接口回调之后

问题:Bean生命周期
执行顺序:

  1. 构造方法(Constructor)

  2. 依赖注入(字段、setter 方法)

  3. Aware 接口(如 BeanNameAware、ApplicationContextAware)

  4. @PostConstruct 方法

  5. InitializingBean.afterPropertiesSet()

  6. 自定义 init-method(如果有)

  7. BeanPostProcessor.postProcessBeforeInitialization() 初始化前后增强,多用于自动代理、AOP、动态注入

  8. 初始化完成

  9. BeanPostProcessor.postProcessAfterInitialization()

  10. Spring 容器完成刷新

  11. ApplicationRunner / CommandLineRunner 的 run() 方法 Spring 容器完全启动后,启动后逻辑、预热缓存、拉取远端配置等

    Bean 构建过程
    ┌───────────────────────────┐
    │ 构造函数 │
    │ 依赖注入(@Autowired) │
    │ Aware 接口回调(xxxAware)│
    │ @PostConstruct │
    │ InitializingBean / init() │
    │ BeanPostProcessor.before │
    │ — Bean 初始化完成 — │
    │ BeanPostProcessor.after │
    └───────────────────────────┘

     容器启动完成后
    

┌────────────────────────────┐
│ ApplicationRunner / │
│ CommandLineRunner.run() │
└────────────────────────────┘

问题:BeanFactory和ApplicationContext(增强)
项目 BeanFactory(原始) ApplicationContext(增强)
定义 最基本的 IOC 容器接口 BeanFactory 的子接口,功能更丰富
初始化时机 懒加载:按需创建 Bean 预初始化:容器启动时就创建单例 Bean
适合场景 内存敏感、轻量级框架 企业开发、功能完整的应用
是否支持国际化 否 是(有 MessageSource)
是否支持事件机制 否 是(ApplicationEventPublisher)
是否支持 AOP、注解 否 是(自动处理 @Autowired 等)
是否支持 @PostConstruct 等生命周期管理 否 是

BeanFactory 是懒加载:调用 getBean() 时才真正创建 Bean

能力 BeanFactory ApplicationContext
自动注入(@Autowired 等) ❌ ✅
事件发布与监听(ApplicationEvent) ❌ ✅
国际化支持 ❌ ✅
环境变量访问(Environment) ❌ ✅
Bean 后处理器(BeanPostProcessor 自动注册) ❌ ✅

BeanFactory

├── ListableBeanFactory
│ ↑
│ HierarchicalBeanFactory
│ ↑
│ ApplicationContext(重点)

BeanFactory 是 Spring 最原始的容器,ApplicationContext 是功能齐全的高级容器。
在 Spring Boot 中,默认用的就是 ApplicationContext(比如 AnnotationConfigApplicationContext)。

问题:BeanFactory和FactoryBean的区别?
BeanFactory:Spring 的 容器接口,负责管理和创建 Bean。
FactoryBean:你定义的一个 工厂 Bean,用于自定义创建某个对象的方式。

FactoryBean 是你定义的一个 Bean,用来创建其他 Bean。Spring 会调用它的 getObject() 方法返回真正的 Bean。
你可以用它来封装复杂对象的创建逻辑(如代理对象、单例池对象、适配第三方库对象等)。

// 加个 & 前缀,表示获取工厂 Bean 本身
MyFactoryBean factoryBean = (MyFactoryBean) context.getBean(“&myBean”);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++_类和对象(下)

【本节目标】 再谈构造函数Static成员友元内部类匿名对象拷贝对象时的一些编译器优化再次理解封装 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:Date(in…

连续数据离散化与逆离散化策略

数学语言描述: 在区间[a,b]中有一组符合某分布的数据: 1.求相同区间中另一组符合同样分布的数据与这组数据的均方误差 2.求区间中点与数据的均方误差 3.求在区间中均匀分布的一组数据与这组数据的均方误差 一:同分布数据随机映射 假设在…

Redash:一个开源的数据查询与可视化工具

Redash 是一款免费开源的数据可视化与协作工具,可以帮助用户快速连接数据源、编写查询、生成图表并构建交互式仪表盘。它简化了数据探索和共享的过程,尤其适合需要团队协作的数据分析场景。 数据源 Redash 支持各种 SQL、NoSQL、大数据和 API 数据源&am…

FreeRTOS的空闲任务

在 FreeRTOS 中,空闲任务(Idle Task) 是操作系统自动创建的一个特殊任务,其作用和管理方式如下: 1. 空闲任务创建 FreeRTOS 内核自动创建:当调用 vTaskStartScheduler() 启动调度器时,内核会自…

Java进阶之旅-day05:网络编程

引言 在当今数字化的时代,网络编程在软件开发中扮演着至关重要的角色。Java 作为一门广泛应用的编程语言,提供了强大的网络编程能力。今天,我们深入学习了 Java 网络编程的基础知识,包括基本的通信架构、网络编程三要素、IP 地址、…

大数据(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧

目录 背景一、Hive基础查询核心语法1. 基础查询(SELECT & FROM)2. 条件过滤(WHERE)3. 聚合与分组(GROUP BY & HAVING)4. 排序与限制(ORDER BY & LIMIT) 二、复杂查询实战…

Synopsys:设计对象

相关阅读 Synopsyshttps://blog.csdn.net/weixin_45791458/category_12812219.html?spm1001.2014.3001.5482 对于Synopsys的EDA工具(如Design Compiler、PrimeTime、IC Compiler)等,设计对象(Design Objects)是组成整个设计的抽象表示&…

【愚公系列】《高效使用DeepSeek》053-工艺参数调优

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…

深度学习篇---模型训练(1)

文章目录 前言一、库导入与配置部分介绍 二、超参数配置简介 三、模型定义1. 改进残差块2. 完整CNN模型 四、数据集类五、数据加载函数六、训练函数七、验证函数八、检查点管理九、主函数十、执行入口十一、关键设计亮点总结1.维度管理2.数据标准化3.动态学习率4.梯度剪裁5.检查…

题解:AT_abc241_f [ABC241F] Skate

一道经典的 bfs 题。 提醒:本题解是为小白专做的,不想看的大佬请离开。 这道题首先一看就知道是 bfs,但是数据点不让我们过: 1 ≤ H , W ≤ 1 0 9 1\le H,W\le10^9 1≤H,W≤109。 那么我们就需要优化了,从哪儿下手…

【含文档+PPT+源码】基于微信小程序的乡村振兴民宿管理系统

项目介绍 本课程演示的是一款基于微信小程序的乡村振兴民宿管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…

STM32定时器通道1-4(CH1-CH4)的引脚映射关系

以下是 STM32定时器通道1-4(CH1-CH4)的引脚映射关系的详细说明,以常见型号为例。由于不同系列/型号差异较大,请务必结合具体芯片的参考手册确认。 一、STM32F1系列(如STM32F103C8T6) 1. TIM1(高级定时器) 通道默认引脚重映射引脚(部分/完全)备注CH1PA8无互补输出CH1…

bge-m3+deepseek-v2-16b+离线语音能力实现离线文档向量化问答语音版

ollama run deepseek-v2:16b ollama pull bge-m3 1、离线听写效果的大幅度提升。50M 1.3G(每次初始化都会很慢)---优化到首次初始化使用0延迟响应。 2、文档问答历史问题处理与优化,文档问答离线策略讨论与参数暴露。 3、离线大模型答复中断…

前端界面在线excel编辑器 。node编写post接口获取文件流,使用传参替换表格内容展示、前后端一把梭。

首先luckysheet插件是支持在线替换excel内容编辑得但是浏览器无法调用本地文件,如果只是展示,让后端返回文件得二进制文件流就可以了,直接使用luckysheet展示。 这里我们使用xlsx-populate得node简单应用来调用本地文件,自己写一个…

JavaScript学习20-Event事件对象

1.属性 即点击谁就打印出来谁 2.方法 未添加stopPropagatio方法: 添加stopPropagatio方法后:

FreeRTOS 启动过程中 SVC 和 PendSV 的工作流程​

在 FreeRTOS 的启动过程中,SVC(Supervisor Call) 和 PendSV(Pendable Service Call) 是两个关键的系统异常,分别用于 首次任务启动 和 任务上下文切换。它们的协作确保了从内核初始化到多任务调度的平滑过渡。以下是详细的工作流程分析(以 ARM Cortex-M 为例): 1. SVC…

[自制调试工具]构建高效调试利器:Debugger 类详解

一、引言 在软件开发的漫漫征程中,调试就像是一位忠诚的伙伴,时刻陪伴着开发者解决代码里的各类问题。为了能更清晰地了解程序运行时变量的状态,我们常常需要输出各种变量的值。而 Debugger 类就像是一个贴心的调试助手,它能帮我…

foobar2000 VU Meter Visualisation 插件汉化版 VU表

原英文插件点此 界面展示 下载 https://wwtn.lanzout.com/iheI22ssoybi 安装方式 解压安装文件,文件名为:foo_vis_vumeter-0.10.2_CHINIESE.fb2k-component

消息中间件对比与选型指南:Kafka、ActiveMQ、RabbitMQ与RocketMQ

目录 引言 消息中间件的定义与作用 消息中间件在分布式系统中的重要性 对比分析的四种主流消息中间件概述 消息中间件核心特性对比 消息传递模型 Kafka:专注于发布-订阅模型 ActiveMQ:支持点对点和发布-订阅两种模型 RabbitMQ:支持点…

liunx输入法

1安装fcitx5 sudo apt update sudo apt install fcitx fcitx-pinyin 2配置为默认输入法 设置-》系统-》区域和语言 点击系统弹出语言和支持选择键盘输入法系统 3设置设置 fcitx-configtool 如果没显示需要重启电脑 4配置fcitx 把搜狗输入法放到第一位(点击下面…