【面试宝典】spring常见面试题总结[上]
一、什么是 Spring 框架?
Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。
Spring 帮助开发者解决基础性的问题,使开发者专注编写业务代码。
二、Spring Freamework 有哪些功能?
- IOC: 控制反转
- AOP: 面向切面可以将应用业务逻辑和系统服务分离,以实现高内聚。
- 容器:Spring 负责创建和管理对象的声明周期和配置。
- MVC: 对 web 应用提供了高度可配置性,其他框架集成也十分方便。
- 事务管理:提供了用于事务管理的通用抽象层。Spring 的事务支持也可用于容器较少的环境。
- JDBC异常:Spring 的 JDBC 抽象层提供了一个异常层次结构,简化了错误处理策略。
三、什么是 Spring Ioc 容器?
Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象实例化,配置和组装的指令。
四、依赖注入的方式有哪几种?
- 构造函数注入
- setter 注入
- 接口注入
五、IOC 的好处和实现机制
它将最小化应用程序中的代码量;它以最小的影响和最少的侵入机制促进松耦合;它支持即时实例化和延迟加载服务。
Spring 中 IOC 的实现原理就是工程模式加反射机制。
六、@Compoent、@Controller、@Repository、@Service 有何区别?
-
@Compoent:这个注解是将类标记为 bean。它是任何 Spring 管理组件的通用构造型。Spring 的组件扫描机制现在可以将其拾取并将拉入应用程序环境中。
-
@Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IOC 容器中。
-
@Service:此注解是组件注解的特化。它不会对
@Compoent注解提供任何其他行为。你可以在服务层类中使用它,而不是@Compoent,因为它以更好的方式指名了意图。 -
@Repository:这个注解是具有类似用途何和功能的
@Compoent注解的特化。它为 DAO 提供了额外的好处。它即将 DAO 导入 IOC 容器,并使未检查的异常有资格转换为 Spring DataAccessException。
七、@Autowired 注解有什么用?
它可以准确的控制应该在何处以及如何进行自动装配。此注解用于在 setter 方法,构造函数,具有任意名称或多个参数的属性或者方法上自动装配 bean。默认情况下,它是类型驱动的注入。
八、spring 支持的事务管理类型
-
程序化事务管理:在此过程中,在变成的帮助下管理事务,它为程序员提供了极大的灵活性。但是维护起来非常困难。
-
声明式事务管理:在此,事务管理和业务代码分离。仅使用注解或基于 XML 的配置来管理事务。
九、BeanFactory 和 ApplicationContext 有什么区别?
BeanFactory 和 ApplicationContext 是 Spring 框架中的两个核心接口,它们都可以作为 Spring 的容器,但存在多方面的区别。以下是对两者区别的详细分析:
1、概念与功能
BeanFactory:
- 是 Spring 框架中最底层的接口,是 IOC(控制反转)的核心。
- 提供了 Bean 的创建、配置、初始化和销毁等基本操作。
- 功能包括 Bean 的定义、加载、实例化、依赖注入和生命周期的管理。
- 主要面向 Spring 框架本身,是 Spring 的基础设施。
ApplicationContext:
- 继承自 BeanFactory 接口,除了包含 BeanFactory 的所有功能外,还提供了更多扩展功能。
- 支持国际化、资源文件访问(如URL和文件)、事件传播等。
- 面向使用 Spring框架 的开发者,提供了更完整的框架功能。
- 被推荐为Java EE应用的首选容器。
2、加载机制
BeanFactory:
- 采用延时加载(Lazy Loading)机制,即在容器启动时不会注入 Bean,而是在需要使用Bean 的时候,才会对该 Bean 进行加载和实例化。
- 如果 Bean 的某个属性没有注入,BeanFactory 加载时不会抛出异常,直至第一次调用
getBean()方法时才会抛出异常。
ApplicationContext:
- 在容器启动时,一次性创建并初始化所有的 Bean,因此运行时的速度相对 BeanFactory 较快。
- 在容器启动时就可以发现 Spring 配置文件中存在的问题,有利于检测依赖属性是否注入。
- 由于一次性加载所有 Bean,可能会导致内存占用较多,尤其是在 Bean 数量较多时,会影响程序的启动速度。
3、创建与注册方式
BeanFactory:
- 通常以编程的方式创建,如使用
XmlBeanFactory或DefaultListableBeanFactory等实现类。 - 需要手动注册 BeanPostProcessor 和 BeanFactoryPostProcessor 等。
ApplicationContext:
- 以声明的方式创建,如使用
ClassPathXmlApplicationContext、FileSystemXmlApplicationContext等实现类。 - 自动注册 BeanPostProcessor 和 BeanFactoryPostProcessor 等,简化了配置过程。
十、Spring Bean 的声明周期
Spring Bean的生命周期是指从Bean的创建、初始化到销毁的整个过程,这个过程由Spring IoC容器(Inversion of Control,控制反转容器)控制。Spring Bean的生命周期可以大致分为几个主要阶段,每个阶段都包含特定的操作和回调点,允许开发者在Bean的生命周期中的不同点插入自定义逻辑。以下是对Spring Bean生命周期的详细解释:
1、Bean元信息配置阶段
- 定义Bean信息:通过XML配置文件、注解(如
@Component、@Service等)、Java代码(使用@Bean注解)或properties文件等方式定义Bean的信息。 - 解析Bean信息:Spring容器启动时,会解析这些配置信息,将其转换为内部的
BeanDefinition对象。BeanDefinition包含了Bean的元数据信息,如类名、作用域、依赖关系等。
2、Bean注册阶段
- 注册Bean到容器:解析后的
BeanDefinition对象会被注册到Spring IoC容器中,容器会维护一个Bean定义的注册表,用于后续的Bean实例化和依赖注入。
3、Bean实例化阶段
- 实例化前阶段:在Bean实例化之前,可能会进行一些前置处理,如检查Bean的依赖项是否已准备好。
- 实例化阶段:根据
BeanDefinition中的信息,使用反射机制创建Bean的实例。对于单例Bean,Spring容器会缓存这个实例,以便后续请求时直接返回。
4、属性赋值阶段
- 实例化后阶段:Bean实例化完成后,但属性还未赋值之前,可能会进行一些额外的处理。
- 属性赋值前阶段:设置Bean的属性值之前,可能需要进行一些准备工作。
- 属性赋值阶段:Spring根据
BeanDefinition中的依赖信息,通过依赖注入的方式为Bean的属性赋值。这包括通过构造函数注入、Setter方法注入等方式。
5、初始化阶段
- Aware接口回调阶段:如果Bean实现了特定的Aware接口(如
BeanNameAware、BeanFactoryAware、ApplicationContextAware等),Spring容器会回调这些接口的相应方法,将容器相关的信息注入到Bean中。 - 初始化前阶段:在Bean正式初始化之前,可能会执行一些前置处理逻辑。
- 初始化阶段:
- 如果Bean实现了
InitializingBean接口,会调用其afterPropertiesSet()方法。 - 如果在Bean配置中指定了
init-method,则会调用该方法。
- 如果Bean实现了
- 初始化后阶段:Bean初始化完成后,可能会执行一些后置处理逻辑。
6、使用阶段
- Bean的使用:初始化完成后,Bean就可以被应用程序使用了。Spring容器负责维护Bean的实例,并根据需要将其注入到其他Bean中。
7、销毁阶段
- 销毁前阶段:在Bean销毁之前,可能会执行一些清理工作。
- 销毁阶段:
- 如果Bean实现了
DisposableBean接口,会调用其destroy()方法。 - 如果在Bean配置中指定了
destroy-method,则会调用该方法。 - 对于单例Bean,Spring容器关闭时会自动调用这些销毁方法。
- 如果Bean实现了
总结
Spring Bean的生命周期是一个从定义到销毁的完整过程,其中包含了多个阶段和回调点。通过在这些回调点插入自定义逻辑,开发者可以对Bean的生命周期进行精细控制,以满足复杂的应用需求。
相关文章:
【面试宝典】spring常见面试题总结[上]
一、什么是 Spring 框架? Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。 Spring 帮助开发者解决基础性的问题,使开发者专注编写业务代码。 二、Spring Freamework 有哪些功能? IOC: 控制反转AOP: 面…...
NC单链表的排序
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一个节点…...
阿里云部署open-webui实现openai代理服务(持续更新)
一、展示 xiezhaoxuan.top:8080 二、 环境准备 1. 阿里云服务器,ubuntu22系统 2. http代理(可访问外网) 3. openai API Key 三、实际操作记录(阿里云服务器端) 1. 根据官方文档安装open-webui服务端(看完这节再操作): 🚀 Getting Started | Open WebUI 1. 如果服务器配置比较…...
Vue3简介和快速体验
文章目录 前言1. Vue3介绍2. Vue3快速体验(非工程化方式) 前言 本次主要用VScode开发代码,vscode的安装很简单,不会的可以查询一下网上的资料 1. Vue3介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于…...
LeetCode98 验证二叉搜索树
前言 题目: 98. 验证二叉搜索树 文档: 代码随想录——验证二叉搜索树 编程语言: C 解题状态: 对中序遍历理解不到位 思路 了解了中序遍历会返回一个有序数组后,本题就可以迎刃而解。只需要判断,返回的数组…...
llama的神经网络结构;llama的神经网络结构中没有MLP吗;nanogpt的神经网络结构;残差是什么;残差连接:主要梯度消失
目录 解释代码 潜在问题和修正 结论 llama的神经网络结构 神经网络结构概述 举例说明 llama的神经网络结构中没有MLP吗 nanogpt的神经网络结构 1. 词嵌入层(Embedding Layer) 2. Transformer编码器层(Transformer Encoder Layer) 3. 层归一化(Layer Normalizat…...
函数的常量引用入参const saclass sdf,可否传入一个指向saclass对象的指针 shared_ptr<saclass>
不可以直接将一个指向 saclass 对象的 shared_ptr<saclass> 作为参数直接传入一个期望 const saclass& 类型参数的函数。原因是类型不匹配:shared_ptr<saclass> 是一个智能指针类型,它封装了对 saclass 对象的指针,并提供了一…...
数据库:SQL——数据库操作的核心语言
数据库:SQL——数据库操作的核心语言 SQL(结构化查询语言)是关系型数据库管理系统中的标准语言,广泛用于数据的定义、操作、控制和查询。SQL 包含多个子语言,分别用于不同的数据库操作任务,包括数据定义&a…...
Unity + HybridCLR 从零开始
官方文档开始学习,快速上手 | HybridCLR (code-philosophy.com)是官方文档链接 1.建议使用2019.4.40、2020.3.26、 2021.3.0、2022.3.0 中任一版本至于其他2019-2022LTS版本可能出现打包失败情况 2. Windows Win下需要安装visual studio 2019或更高版本。安装时至少要包含 使…...
C++小总结
C小总结 接口 对外暴露头文件中,只需要声明接口函数即可,其他不暴露的函数不需要进行声明。接口的参数使用指针形式比较好,因为外部使用时可以对实参进行创建和析构,如果非接口函数使用new开辟,不太好进行析构。在使…...
从快到慢学习Git指令
Git是现在最流行的版本控制工具之一。无论是在开源社区还是企业软件开发中,Git都扮演着至关重要的角色。本文将根据不同的需求,分别提供快速上手和深入学习Git的指南。 如果你只想下载代码 如果你只是想下载GitHub或其他代码仓库的代码,那你只需要了解以下两个命令: git clo…...
传奇游戏发布渠道
传奇游戏发布渠道 回答:游戏发布平台|手机游戏发布平台 传奇游戏发布渠道作为游戏开发商直接控制的信息传播途径,其安全性自然有着较高的保障。首先,渠道通常会采用先进的加密技术和安全协议来保护数据传输过程中的安全,防止信息…...
如何有效阅读科研论文【方法论】
如何读论文【论文精读1】_哔哩哔哩_bilibili 如何有效阅读科研论文 科研论文是了解学术领域最新研究成果和技术发展的重要途径。有效地阅读论文不仅能够帮助我们掌握前沿知识,还能提升自己的研究能力。本文将介绍一种系统的论文阅读方法,并通过具体的步…...
【揭秘】层层加码,竟能加速渠道营销数字化?-eBest
国潮饮料品牌在eBest RTM系统的支持下,已经将数字化贯彻到每一个销售环节,且看eBest如何通过“层层加码”,进一步加速该饮料品牌渠道数字化进程,实现弯道超车? “一箱四码”垛码 五码实现渠道数字化 为提高营销和数字…...
基于WAMP环境的简单用户登录系统实现(v3版)(持续迭代)
目录 版本说明 实现环境: 流程逻辑框图: 数据库连接 登录页面:login.html 登录处理实现:doLogin.php 用户欢迎页面:welcome.php 密码修改页面:change_password.html 修改处理:doChangePa…...
大语言模型与多模态大模型loss计算
文章目录 前言一、大语言模型loss计算1、loss计算代码解读2、构建模型输入内容与label标签3、input_ids与labels格式 二、多模态大模型loss计算方法1、多模态loss计算代码解读2、多模态输入内容2、大语言模型输入内容3、图像embending如何嵌入文本embeding 前言 如果看了我前面…...
线上研讨会 | CATIA助力AI提升汽车造型设计
报名链接: 2024探索之旅第二季...
Unity新输入系统 之 InputAction(输入配置文件最基本的单位)
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 首先你应该了解新输入系统的构成结构:Unity新输入系统结构概览-CSDN博客 Input System - Unity 手册 1.In…...
【3】MySQL的安装即启动
目录 一.下载 二.安装 三.启动 一.下载 二.安装 安装MySQL时遇到的Initializing database错误:推荐下面的博客(简单就是电脑名不要出现中文) https://blog.csdn.net/m0_52775858/article/details/123705566 三.启动 PS:cmd要…...
变“金点子”为“好应用”,合合信息智能文档处理技术助力大学生探索AI创新边界
谈“糖”色变、追求养生、低卡生活……这些热门词汇频频在社交媒体上掀起讨论热潮。有这样一批年轻人不但捕捉到了这些词汇背后真实的用户需求,并且正在利用AI技术寻找解决之道。 近日,“中国大学生服务外包创新创业大赛”(以下简称“服创大…...
2026届学术党必备的降重复率平台横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 1. 在学术写作这个特定领域里,合理运用AI工具能切实有效提升文献检索、大纲构建…...
不止于校验:用HashMyFiles命令行玩转文件批量管理与VirusTotal联动
从本地到云端:HashMyFiles命令行与VirusTotal联动的安全自动化实践 在数字化时代,文件完整性校验和安全检测已成为IT运维、安全分析乃至日常开发中不可或缺的环节。传统图形界面工具虽然直观,但在处理大批量文件或需要自动化集成的场景下显得…...
Windows网络测速终极指南:iperf3免费工具完整教程
Windows网络测速终极指南:iperf3免费工具完整教程 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 还在为网络速度不稳定而烦恼吗&#x…...
口碑好的柜子定制服务商
在装修和商业展示领域,柜子定制的质量与风格直接影响着整体效果。今天,就来为大家揭开一家口碑超棒的柜子定制服务商——东莞市龙圣展柜装饰有限公司(以下简称龙圣展柜)的神秘面纱。一、丰富多样的产品服务,满足多元需…...
C++ 算法实战:从鸡兔同笼到多元方程求解的编程思维演进
1. 从鸡兔同笼开始理解算法思维 记得第一次接触鸡兔同笼问题时,我正啃着铅笔头对着数学作业发愁。题目说笼子里有35个头和94只脚,问鸡和兔各有多少只。这个看似简单的应用题,后来竟成了我算法思维的启蒙老师。 用C解决这个问题时,…...
边缘计算中的AI优先设计:从芯片选型到模型部署的实战指南
1. 项目概述:为什么“AI优先”是边缘计算的必然选择 最近和几个做硬件和嵌入式开发的老朋友聊天,话题总绕不开一个词:AIoT。大家的感觉很一致,现在的项目要是没沾点“智能”的边,好像都不好意思拿出手。但真做起来&…...
【Docker】解放C盘空间:在Win10上利用WSL2迁移Docker镜像存储路径实战
1. 为什么需要迁移Docker镜像存储路径? 很多Windows 10用户在使用Docker进行开发时都会遇到一个头疼的问题:C盘空间莫名其妙就被占满了。我自己就曾经遇到过这种情况,明明没装多少软件,C盘却显示只剩下几个GB的空间。后来发现罪魁…...
3个颠覆性技术突破让百度网盘文件分享效率提升500%
3个颠覆性技术突破让百度网盘文件分享效率提升500% 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否曾经因为百度网盘分享链接频繁失效而不得不重新上…...
Python实战:三大曲线平滑技术对比与场景选型指南
1. 曲线平滑处理的必要性 当你处理传感器数据、金融时间序列或任何带有噪声的曲线时,原始数据往往像一条暴躁的蚯蚓——上下乱窜让人抓狂。我在处理工业传感器数据时就遇到过这种情况:一条本该平滑的温度曲线,因为电磁干扰变成了"心电图…...
图卷积神经网络自编码器天线优化设计方法【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅如需沟通交流,点击《获取方式》 (1)天线结构图表示与变分图自编码器代理模型:…...
