Spring常见问题复习
############Spring#############
Bean的生命周期是什么?
BeanFactory和FactoryBean的区别?
ApplicationContext和BeanFactory的区别?
BeanFactoryAware注解,还有什么其它的Aware注解
BeanFactoryAware方法和@Bean注解的方法执行顺序
问题:Aware和@Bean
- 实例化 Bean @Bean 方法执行,返回 Bean 对象
Spring 会在解析配置类阶段(ConfigurationClassPostProcessor)执行这个方法(@Bean的方法),返回一个 Bean 实例 - 属性注入(依赖注入) 注入 @Autowired 字段或构造函数参数
- Aware 回调 执行 BeanNameAware, BeanFactoryAware, ApplicationContextAware 等
- 初始化回调 @PostConstruct / InitializingBean.afterPropertiesSet()
- 完成初始化 Bean 完成创建,交由容器使用
问题:@PostConstruct / InitializingBean.afterPropertiesSet()
特性 @PostConstruct InitializingBean.afterPropertiesSet()
所属范畴 JSR-250 标准注解 Spring 特有接口
写法简洁 ✅ 是,注解方式,方法无参数 ❌ 否,需实现接口,覆盖方法
执行时机 属性注入完成后 属性注入完成后
适合多个方法初始化? ✅ 支持多个 @PostConstruct 方法 ❌ 只能有一个 afterPropertiesSet() 方法
推荐程度 ✅ 推荐,优雅简洁 ⚠️ 次选,适合框架或基础设施类使用
Bean 生命周期参与顺序位置 执行在 Aware 接口回调之后 执行在 Aware 接口回调之后
问题:Bean生命周期
执行顺序:
-
构造方法(Constructor)
-
依赖注入(字段、setter 方法)
-
Aware 接口(如 BeanNameAware、ApplicationContextAware)
-
@PostConstruct 方法
-
InitializingBean.afterPropertiesSet()
-
自定义 init-method(如果有)
-
BeanPostProcessor.postProcessBeforeInitialization() 初始化前后增强,多用于自动代理、AOP、动态注入
-
初始化完成
-
BeanPostProcessor.postProcessAfterInitialization()
-
Spring 容器完成刷新
-
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”);
相关文章:
Spring常见问题复习
############Spring############# Bean的生命周期是什么? BeanFactory和FactoryBean的区别? ApplicationContext和BeanFactory的区别? BeanFactoryAware注解,还有什么其它的Aware注解 BeanFactoryAware方法和Bean注解的方法执行顺…...
JJJ:generic netlink例程分析
接嵌入式毕设、课设辅导、技术咨询,欢迎私信 完整代码:github代码仓链接 若想要和指定的generic netlink family通信,如: 994 static struct genl_family genl_ctrl __ro_after_init { // generic netlink子协议995 .module THIS_MODU…...
Dify票据识别遇到的分支判断不准确问题
已测试这篇文章中 https://zhuanlan.zhihu.com/p/5465385787 使用多分支条件判断使用不同的大模型识别图片内容 发现了细节问题。在使用时若不注意,分支会出现走向不准的问题。 需要关注部分 下方红框处。1,2后不能跟点。否则会出问。除此之外࿰…...
《全栈+双客户端Turnkey方案》架构设计图
今天分享一些全栈双客户端Turnkey方案的架构与结构图。 1:三种分布式部署方案:网关方案,超级服务器单服方案,直连逻辑服方案 2: 单服多线程核心架构: 系统服务逻辑服服务 3: 系统服务的多线程池调度设计 4:LogicServer Update与ECS架构&…...
某碰瓷国赛美赛,号称第三赛事的数模竞赛
首先我非常不能理解的就是怎么好意思自称第三赛事的呢?下面我们进行一个简单讨论,当然这里不对国赛和美赛进行讨论。首先我们来明确一点,比赛的含金量由什么来定?这个可能大家的评价指标可能不唯一,我通过DeepSeek选取…...
【代码模板】如何用FILE操作符打开文件?fopen、fclose
#include "stdio.h" #include "unistd.h"int main(int argc, char *argv[]) {FILE *fp fopen("1.log", "wb");if (!fp) {perror("Failed open 1.log");return -1;}fclose(fp); }关于权限部分参考兄弟篇【代码模板】C语言中…...
【大模型深度学习】如何估算大模型需要的显存
一、模型参数量 参数量的单位 参数量指的是模型中所有权重和偏置的数量总和。在大模型中,参数量的单位通常以“百万”(M)或“亿”(B,也常说十亿)来表示。 百万(M):表示…...
Mysql 数据库编程技术01
一、数据库基础 1.1 认识数据库 为什么学习数据库 瞬时数据:比如内存中的数据,是不能永久保存的。持久化数据:比如持久化至数据库中或者文档中,能够长久保存。 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长…...
Class<?> 和Class<T >有什么区别
Class<?> 和 Class<T> 在 Java 中都表示 Class 类型的对象,但它们的使用方式和作用略有不同。让我们详细分析它们的区别: 1. Class<?>(通配符 Class 类型) ? 代表一个未知类型(Wildcard…...
[自制调试工具]利用模板函数打造通用调试工具
引言 上一篇文章 我们介绍了调式类工具,这篇文章我们补充一下 点击这里查看 在软件开发的过程中,调试是必不可少的环节。为了能更高效地定位和解决问题,我们常常需要在代码中插入一些调试信息,来输出变量的值、函数的执行状态等。传统的调试…...
Python地理数据处理 28:基于Arcpy批量操作实现——按属性提取和分区统计
Arcpy批量操作 1. 批量按属性提取2. 批量分区统计(最大值、最小值和像元个数等) 1. 批量按属性提取 # -*- coding: cp936 -*- """ PROJECT_NAME: ArcPy FILE_NAME: batch_attribute_extract AUTHOR: JacksonZhao DATE: 2025/04/05 &qu…...
Mysql慢查询设置 和 建立索引
1 .mysql慢查询的设置 slow_query_log ON //或 slow_query_log_file /usr/local/mysql/data/slow.log long_query_time 2 修改后重启动mysql 1.1 查看设置后的参数 mysql> show variables like slow_query%; --------------------------------------------------…...
【Android】界面布局-相对布局RelativeLayout-例子
题目 完成下面相对布局,要求: 中间的button在整个屏幕的中央,其他的以它为基准排列。Hints:利用layout_toEndof,_toRightof,_toLeftof,_toStartof完成。 结果演示 代码实现 <?xml version"1.0" encoding"u…...
Spring Boot 中使用 Redis:从入门到实战
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
【ROS】 CMakeLists 文件详解
【ROS】 CMakeLists文件详解 前言标准的CMAKELIST.TXT文件的组成部分CMake 版本要求和项目名称指定编译器和设置构建规则查找 ROS 依赖消息和服务文件catkin_package设置头文件目录路径添加可执行文件的构建规则设置编译依赖关系(构建顺序)设置目标文件的…...
【每日算法】Day 17-1:位图(Bitmap)——十亿级数据去重与快速检索的终极方案(C++实现)
解锁海量数据处理的极致空间效率!今日深入解析位图的核心原理与实战应用,从基础操作到分块优化,彻底掌握仅用1bit存储一个数据的压缩艺术。 一、位图核心思想 位图(Bitmap) 是一种通过比特位表示数据存在性的数据结构…...
7-1 素数求和(线性筛实现)
7-1 素数求和。 分数 10 中等 全屏浏览 切换布局 作者 魏英 单位 浙江科技大学 输入两个正整数m和n(1<m<n<500)统计并输出m和n之间的素数个数以及这些素数的和。 输入格式: 输入两个正整数m和n(1<m<n<500࿰…...
NLP简介及其发展历史
自然语言处理(Natural Language Processing,简称NLP)是人工智能和计算机科学领域中的一个重要分支,致力于实现人与计算机之间自然、高效的语言交流。本文将介绍NLP的基本概念以及其发展历史。 一、什么是自然语言处理?…...
ZKmall开源商城多云高可用架构方案:AWS/Azure/阿里云全栈实践
随着企业数字化转型的加速,云计算服务已成为IT战略中的核心部分。ZKmall开源商城作为一款高性能的开源商城系统,其在多云环境下的高可用架构方案备受关注。下面将结合AWS、Azure和阿里云三大主流云平台,探讨ZKmall的多云高可用架构全栈实践。…...
优化 Web 性能:处理非合成动画(Non-Composited Animations)
在 Web 开发中,动画能够增强用户体验,但低效的动画实现可能导致性能问题。Google 的 Lighthouse 工具在性能审计中特别关注“非合成动画”(Non-Composited Animations),指出这些动画可能增加主线程负担,影响…...
Eliet Chat开发日志:信令服务器注册与通信过程
目录 1. 架构设计:信令服务器与客户端 2. 选择技术栈 3. 实现信令服务器 4. 客户端实现 5. 测试 6. 下一步计划 日期:2025年4月5日 今天的工作重点是实现两个设备通过信令服务器注册并请求对方公网地址信息,以便能够进行点对点通信。我…...
leetcode二叉树刷题调试不方便的解决办法
1. 二叉树不易构建 在leetcode中刷题时,如果没有会员就需要将代码拷贝到本地的编译器进行调试。但是leetcode中有一类题可谓是毒瘤,那就是二叉树的题。 要调试二叉树有关的题需要根据测试用例给出的前序遍历,自己构建一个二叉树,…...
颜色性格测试:探索你的内在性格色彩
颜色性格测试:探索你的内在性格色彩 在我们的日常生活中,颜色无处不在,而我们对颜色的偏好往往能反映出我们内在的性格特质。今天我要分享一个有趣的在线工具 —— 颜色性格测试,它能通过你最喜欢的颜色来分析你的性格倾向。 &…...
hashtable遍历的方法有哪些
在 Java 中,遍历 Hashtable(或其现代替代品 HashMap)有多种方式,以下是 6 种常用方法的详细说明和代码示例: 1. 使用 keySet() 增强 for 循环 Hashtable<String, Integer> table new Hashtable<>(); // …...
CMake学习--Window下VSCode 中 CMake C++ 代码调试操作方法
目录 一、背景知识二、使用方法(一)安装扩展(二)创建 CMake 项目(三)编写代码(四)配置 CMakeLists.txt(五)生成构建文件(六)开始调试 …...
浅谈ai - Activation Checkpointing - 时间换空间
前言 曾在游戏世界挥洒创意,也曾在前端和后端的浪潮间穿梭,如今,而立的我仰望AI的璀璨星空,心潮澎湃,步履不停!愿你我皆乘风破浪,逐梦星辰! Activation Checkpointing(激…...
提高MCU的效率方法
要提高MCU(微控制器单元)的编程效率,需要从硬件特性、代码优化、算法选择、资源管理等多方面入手。以下是一些关键策略: 1. 硬件相关优化 时钟与频率: 根据需求选择合适的时钟源(内部/外部振荡器),避免过高的时钟频率导致功耗浪费。关闭未使用的外设时钟(如定时器、UA…...
5G从专家到小白
文章目录 第五代移动通信技术(5G)简介应用场景 数据传输率带宽频段频段 VS 带宽中低频(6 GHz以下):覆盖范围广、穿透力强高频(24 GHz以上):满足在热点区域提升容量的需求毫米波热点区…...
神经网络入门:生动解读机器学习的“神经元”
神经网络作为机器学习中的核心算法之一,其灵感来源于生物神经系统。在本文中,我们将带领大家手把手学习神经网络的基本原理、结构和训练过程,并通过详细的 Python 代码实例让理论与实践紧密结合。无论你是编程新手还是机器学习爱好者…...
web漏洞靶场学习分享
靶场:pikachu靶场 pikachu漏洞靶场漏洞类型: Burt Force(暴力破解漏洞)XSS(跨站脚本漏洞)CSRF(跨站请求伪造)SQL-Inject(SQL注入漏洞)RCE(远程命令/代码执行)Files Inclusion(文件包含漏洞)Unsafe file downloads(不安全的文件下载)Unsafe file uploads(不安全的文…...
