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

spring面试题 一

一、为了降低Java开发的复杂性,Spring采取了那4种关键策略

基于POJO的轻量级和最小侵入性编程;

通过依赖注入和面向接口实现松耦合;

基于切面和惯例进行声明式编程;

通过切面和模板减少样板式代码。

二、Spring框架的核心:

IoC容器和AOP模块。

通过IoC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务。

IoC让相互协作的组件保持松散的耦合,而AOP编程允许你把遍布于应用各层的功能分离出来形成可重用的功能组件。

三、Spring由哪些模块组成?

Spring 总共大约有 20 个模块, 由 1300 多个不同的文件构成。 而这些组件被

分别整合在核心容器(Core Container) 、 AOP(Aspect Oriented Programming)

和设备支持(Instrumentation) 、数据访问与集成(Data Access/Integeration) 、 

Web、 消息(Messaging) 、 Test等 6模块中。 以下是 Spring 5 的模块结构

图:

 

spring core:提供了框架的基本组成部分,包括控制反转(Inversion of 

Control,IOC)和依赖注入(Dependency Injection,DI)功能。

spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管

理对象称为Bean。

spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框

架式的对象访问方法。

spring jdbc:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂

商特有的错误代码解析, 用于简化JDBC。

spring aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。

spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet 

listeners 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。

spring test:主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进

行单元测试和集成测试。

四、Spring 框架中都用到了哪些设计模式?

1. 工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;

2. 单例模式:Bean默认为单例模式。

3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;

4. 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。

5. 观察者模式

定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener。

五、Spring框架中有哪些不同类型的事件

Spring 提供了以下5种标准的事件:

1. 上下文更新事件(ContextRefreshedEvent

在调用ConfigurableApplicationContext 接口中的refresh()方法时被触发。

2. 上下文开始事件(ContextStartedEvent

当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。

3. 上下文停止事件(ContextStoppedEvent

当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。

4. 上下文关闭事件(ContextClosedEvent

当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。

5. 请求处理事件(RequestHandledEvent

在Web应用中,当一个http请求(request)结束触发该事件。如果一个bean实现了

ApplicationListener接口,当一个ApplicationEvent 被发布以后,bean会自动被通知。

六、Spring 的 IoC支持哪些功能

Spring 的 IoC 设计支持以下功能:

依赖注入

依赖检查

自动装配

支持集合

指定初始化方法和销毁方法

支持回调某些方法(但是需要实现 Spring 接口,略有侵入)

IoC 在 Spring 里,只需要低级容器就可以实现,2 个步骤:

1. 加载配置文件,解析成 BeanDefinition 放在 Map 里。

2. 调用 getBean 的时候,从 BeanDefinition 所属的 Map 里,拿出 Class 对象进行实例化,同时,如果有依赖关系,将递归调用 getBean 方法 —— 完成依赖注入。

七、BeanFactory 和 ApplicationContext有什么区别?

ApplicationContext是BeanFactory的子接口。

依赖关系:

BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取

bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean

之间的依赖关系。

ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具

有的功能外,还提供了更完整的框架功能:

继承MessageSource,因此支持国际化

统一的资源文件访问方式

提供在监听器中注册bean的事件

同时加载多个配置文件

载入多个(有继承关系)上下文 使得每一个上下文都专注于一个特定的层次,比如应用的web

加载方式:

BeanFactroy采用的是延迟加载形式来注入Bean,即只有在使用到某个Bean

时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能发现一些

存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加

载后,直至第一次使用调用getBean方法才会抛出异常。

ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。这样,

在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所

依赖属性是否注入。 ApplicationContext启动后预载入所有的单实例Bean,通

过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建

好了。

相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空

当应用程序配置Bean较多时,程序启动较慢。

创建方式:

BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方

式创建,如使用ContextLoader。

注册方式:

BeanFactory和ApplicationContext都支持BeanPostProcessor

BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要

手动注册,而ApplicationContext则是自动注册。

BeanFactory 简单粗暴,可以理解为就是个 HashMap,Key 是 BeanName,

Value 是 Bean 实例。通常只提供注册(put),获取(get)这两个功能。我

们可以称之为 “低级容器”。

ApplicationContext 可以称之为 “高级容器”。因为他比 BeanFactory 多了

更多的功能。他继承了多个接口。因此具备了更多的功能。例如资源的获取,支

持多种消息(例如 JSP tag 的支持),对 BeanFactory 多了工具级别的支持等

待。所以你看他的名字,已经不是 BeanFactory 之类的工厂了,而是 “应用上

下文”, 代表着整个大容器的所有功能。该接口定义了一个 refresh 方法,此

方法是所有阅读 Spring 源码的人的最熟悉的方法,用于刷新整个容器,即重新

加载/刷新所有的 bean。

相关文章:

spring面试题 一

一、为了降低Java开发的复杂性,Spring采取了那4种关键策略 基于POJO的轻量级和最小侵入性编程; 通过依赖注入和面向接口实现松耦合; 基于切面和惯例进行声明式编程; 通过切面和模板减少样板式代码。 二、Spring框架的核心&am…...

C++中char *,char a[ ]的特殊应用

1.数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。 2.指针 指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址。 3.字符串常量的本质是它的第一个字符的地…...

【Windows10】电脑副屏无法调节屏幕亮度?解决方法

先说下情况,本人对显示器不太懂,属于小白 这个副屏无法调节的问题出现也已经很久了,但是之前亮度适合就无所谓,今天突然按了之后很亮,于是就找问题。 第一步,我直接百度,遇事不决,百…...

Paper简读 - ProGen2: Exploring the Boundaries of Protein Language Models

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/128976102 ProGen2: Exploring the Boundaries of Protein Language Models ProGen2:探索蛋白质语言模型的边界Cumulative density:累积密度 Ligand:在生…...

leaflet 加载WKT数据(示例代码050)

第050个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载WKT文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共67行…...

设计模式-组合模式和建筑者模式详解

一. 组合模式 1. 背景 在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如&…...

Pcap文件的magic_number

1. 简述 pcap文件头中的magicNum是来标识pcap文件文件头和包头字节序和应用是否一致的。 在标准情况下为0xa1b2c3d4。如果相反则说明需要调换字节序。 一般格式 Global Header Packet Header Packet Data Packet Header Packet Data ....pcap文件头格式 typedef struct pca…...

MDS75-16-ASEMI三相整流模块MDS75-16

编辑-Z MDS75-16在MDS封装里采用的6个芯片,是一款工业焊机专用大功率整流模块。MDS75-16的浪涌电流Ifsm为920A,漏电流(Ir)为5mA,其工作时耐温度范围为-40~150摄氏度。MDS75-16采用GPP硅芯片材质,里面有6颗芯片组成。MDS75-16的电…...

基本TCP编程

1. 基本概念 TCP (即传输控制协议) 是一种面向连接的传输层协议,它能提供高可靠性通信 (即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。 2. 通信流程解析 TCP 通信的流程与打电话的过程相似,以下以一对情侣打电话的过程来展示TCP的通信流程: 其中服务端 …...

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】1. 前言2. 软件配置2.1 安装MounRiver Studio3. ADC项目测试3.1 打开ADC工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 ADC 模块包含 2 个 12 位的逐次逼近型的模拟数字转换器,最高 14MHz 的输入时…...

学习SpringCloudAlibaba(二)微服务的拆分与编写

目录 一、单体架构VS微服务架构 1.单体架构 ​(1).单体架构的优点 (2).单体架构的缺点 2.微服务架构 (1)微服务的特性 (2)微服务架构图 (3)微服务的优点 …...

通过对HashMap的源码分析解决部分关于HashMap的问题

HashMap第一次分配多大的空间我们查看resize()中的源码所以当我们没有传入默认容量的参数的时候,默认容量是16当传进一个20的初始参数时,数组的容量是多大所以当我们传入20的参数,这时创建的容量是32(2^5)对…...

【无标题】

Windeployqt 打包,缺少DLL 的原因分析,解决方法 很多同学使用工具windeployqt进行打包发布后,运行exe文件时,还是会出现下图所示的系统错误提示,这种情况就表示相关的DLL 库文件没有被正确打包。可是windeployqt明确显示运行正常啊,难道是QT自家的windeployqt这个工具有…...

渗透测试 -- 网站信息收集

数据来源 01 网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言(php、java、...)、数据库(Mysql、...)为什么要了解这些? 举个例子:发现了一…...

Windows 搭建ARM虚拟机 UOS系统

搭建环境安装虚拟机下载虚拟机QEMU,https://www.qemu.org/download/,目前最新版本是7.2.0。安装完成后,需要将qemu的安装路径设置到环境变量完成后运行cmd,测试环境变量配置完成。qemu-system-aarch64 --version如上截图所示&…...

day58每日温度_下一个更大元素1

力扣739.每日温度 题目链接:https://leetcode.cn/problems/daily-temperatures/ 思路 什么时候用单调栈呢? 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了…...

超清遥感影像语义分割处理

分割出城市中的垃圾堆场,遂寻找到了 UrbanAtlas 2012 database 这个数据集和对应的 baseline baseline IoU for class 1: 0.5667 IoU for class 2: 0.3504 IoU for class 3: 0.0001 IoU for class 4: 0.0002 IoU for class 5: 0.4121 IoU for class 6: 0.0204 IoU for cla…...

RabbitMQ安装及配置

目录1.下载和安装1.1 下载1.2. 安装1.3 测试1.4 卸载管理界面2.1 添加用户2.2 创建Virtual Hosts2.3. 设置权限1.下载和安装 1.1 下载 1.下载Erlang的rpm包 RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注:Erlang环境一定要与RabbitMQ…...

网络协议(四):网络互联模型、物理层、数据链路层

网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络互联模型、物理层、数据链路层 目录一、网…...

请问有没有关于数据预测的方法?

利用数据对未来进行预测分析,虽然不能百分百的准确预测,但是有数据理论支撑的趋势预测是客观可靠的。当数据分析的目的涉及未来决策时,就可以大胆使用预测的思路和方法,如企业明年的战略计划、销售计划等,这对企业而言…...

滴滴盖亚计划ETA数据集实战:如何用Python处理智能交通数据(附完整代码)

滴滴盖亚ETA数据集实战:Python智能交通数据处理全流程解析 引言:智能交通时代的ETA技术价值 在早高峰的深圳深南大道上,网约车司机王师傅刚接单就面临抉择:系统推荐的三条路线中,哪一条能最快到达乘客上车点&#xf…...

解决系统卡顿的5个Mem Reduct内存优化技巧

解决系统卡顿的5个Mem Reduct内存优化技巧 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 你的电脑是否经常在打开多…...

【2026年最新600套毕设项目分享】springboot基于深度学习的蘑菇种类识别系统(14260)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

别再死磕EKF了!用ESKF搞定无人机姿态估计,避开‘大数吃小数’的坑

无人机姿态估计实战:用ESKF避开EKF的数值陷阱 四轴飞行器在高速翻滚时,IMU数据突然出现剧烈抖动——这是去年调试自主无人机时遇到的真实场景。当时使用传统EKF算法,姿态解算在极端机动下频繁发散,直到切换到误差状态卡尔曼滤波&a…...

无需高配电脑!VMware虚拟机运行Qwen3-TTS声音克隆实测教程

无需高配电脑!VMware虚拟机运行Qwen3-TTS声音克隆实测教程 1. 为什么选择虚拟机部署声音克隆? 很多开发者对语音克隆技术感兴趣,但往往被硬件要求劝退。传统认知中,运行1.7B参数量的AI模型需要高端显卡和复杂的环境配置。实际上…...

【2026 最新】 MySQL 数据库安装教程(超详细图文版-纯享版)小白也可以安装成功!

一、前言 MySQL 作为开源关系型数据库的标杆,广泛应用于 Web 开发、数据分析等场景,是程序员必备的基础工具之一。很多新手安装MySQL时都会陷入“版本选择困难症”——版本太高怕兼容出问题,版本太低又缺功能、不支持主流框架,甚…...

实时文本转换:XUnity.AutoTranslator的Unity本地化解决方案

实时文本转换:XUnity.AutoTranslator的Unity本地化解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 在全球化游戏市场中,语言障碍常常成为玩家体验优质内容的最大阻碍。许多…...

SEO_10个简单有效的SEO技巧,快速提升网站排名

SEO:10个简单有效的SEO技巧,快速提升网站排名 在当今互联网时代,网站的排名直接关系到它的流量和盈利能力。SEO(搜索引擎优化)技巧就是为了帮助网站在搜索引擎中获得更高的排名。本文将分享十个简单有效的SEO技巧,帮助…...

NaViL-9B效果对比图:同一图片下temperature=0与0.5响应差异

NaViL-9B效果对比图:同一图片下temperature0与0.5响应差异 1. 模型简介 NaViL-9B是由专业研究机构开发的原生多模态大语言模型,具备强大的文本理解和图像分析能力。该模型支持纯文本问答和图片理解两种主要功能,能够处理复杂的多模态任务。…...

AnimateDiff文生视频零基础入门:5分钟学会用文字生成动态GIF

AnimateDiff文生视频零基础入门:5分钟学会用文字生成动态GIF 1. 为什么选择AnimateDiff作为文生视频的起点? 如果你曾经尝试过AI视频生成工具,可能会被复杂的操作流程和硬件要求劝退。传统方案往往需要你先准备一张静态图片,再通…...