[面试篇~Spring] 必问基础知识

news2024/11/17 23:26:45

文章目录

      • 1. 什么是 Spring
      • 2. Spring 框架有哪些主要的模块?
      • 3. 使用 Spring 框架能带来哪些好处?
      • 4. 什么是控制反转
      • 5. 什么是依赖注入
      • 6. 为什么使用依赖注入
      • 7. 在 Java 中依赖注入有哪几种方式
      • 8. 请解释下 Spring 框架中的 IoC?
      • 9. BeanFactory 和 ApplicationContext 有什么区别
      • 10. ApplicationContext 的常见实现方式

1. 什么是 Spring

Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。
Spring 帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。

2. Spring 框架有哪些主要的模块?

Spring 是一个轻量级框架,有七大模块,分别为 数据,Web,切面,工具,消息,核心,测试
总共 20 几个小模块

  • 核心模块有 Beans,Core,Context,ExpressionIOC 和 DI⭐
  • 切面模块主要有 AOP ,涉及到这个 AOP 编程 ⭐
  • Web模块有 Web,WebMVC, WebSocket, WebFlux
  • 数据模块主要有 ORM ,TX

在这里插入图片描述

Spring的这七大模块你了解吗 - 掘金

3. 使用 Spring 框架能带来哪些好处?

  1. Dependency Injection(DI) 方法使得构造器和 JavaBean properties 文件中的依赖关系一目了然。
  2. IoC 容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。
  3. Spring 并没有闭门造车,Spring利用了已有的技术比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他视图技术。
  4. Spring 框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。
  5. 要测试一项用 Spring 开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用JavaBean形式的POJO类,可以很方便的利用依赖注入来写入测试数据。
  6. Spring 的Web框架亦是一个精心设计的Web MVC框架,为开发者们在web框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行web框架的以外的有力选项。
  7. Spring 提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单DB的环境下)和复杂的共同事物处理(比如利用JTA的复杂DB环境)。

4. 什么是控制反转

控制反转(英语:Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。

通俗地讲,IOC 就是把对象的创建、初始化、销毁交给 spring 来管理,而不是由开发者控制,实现控制反转。

5. 什么是依赖注入

  • “依赖”是指接收方所需的对象。
  • “注入”是指将“依赖”传递给接收方的过程。在“注入”之后,接收方才会调用该“依赖”。

依赖注入是控制反转最常见的设计原则,目的是为了分离关注点,分离接收方和依赖,从而提供松耦合以及代码重用性。

6. 为什么使用依赖注入

传统编程方式,需要手动创建一个实例并使用它。这带来的缺点和问题是:

  • 如果使用不同类型的服务对象,就需要修改、重新编译。
  • 客户类需要通过配置来适配服务类及服务类的依赖。如果程序有多个类都使用同一个服务类,这些配置就会变得复杂并分散在程序各处。
  • 难以单元测试。本来需要使用服务类的 mock 或 stub,在这种方式下不太可行。

因为依赖注入有以下优点:

  • 使用接口或抽象基类,来抽象化依赖实现。
  • 依赖在一个服务容器中注册。客户类构造函数被注入服务实例。框架负责创建依赖实例并在没有使用者时销毁它。

7. 在 Java 中依赖注入有哪几种方式

主要有以下三种实现方式:

  1. 构造器注入
  2. Setter 方法注入
  3. 接口注入

8. 请解释下 Spring 框架中的 IoC?

  • Spring 中的 org.springframework.beans 包和 org.springframework.context 包 构成了 Spring 框架 IoC 容器的基础。
  • BeanFactory 是 Spring IoC 容器的核心接口,提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。
  • ApplicationContex 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory 的基础上添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource 的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的 WebApplicationContext。
  • org.springframework.beans.factory.BeanFactory 是 Spring IoC 容器的具体实现, 用来包装和管理前面提到的各种 bean。

9. BeanFactory 和 ApplicationContext 有什么区别

  • BeanFactory 可以理解为含有 bean 集合的工厂类,包含了各种 bean 的定义,以便在 接收到客户端请求时将对应的 bean 实例化。
  • BeanFactory 还能在实例化对象的时生成协作类之间的关系。可以将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含 了 bean 生命周期的控制,调用客户端的初始化方法 (initialization methods)和销毁方法(destruction methods)。
  • 从表面上看,application context 如同 bean factory 一样具有 bean 定义、bean 关联关系的设置, 根据请求分发 bean 的功能。但 applicationcontext 在此基础上还提供了其他的功能。
  1. 提供了支持国际化的文本消息
  2. 统一的资源文件读取方式
  3. 已在监听器中注册的 bean 的事件

10. ApplicationContext 的常见实现方式

  1. ClassPathXmlApplicationContext:从 classpath 的 XML 配置文件中读取上下文,并生成上 下文定义。应用程序上下文从程序环境变量中。
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); 
  1. FileSystemXmlApplicationContext :由文件系统中的 XML 配置文件读取上下文。
ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml"); 
  1. XmlWebApplicationContext:由 Web 应用的 XML 文件读取上下文。
  2. AnnotationConfigApplicationContext(基于 Java 配置启动容器)

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

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

相关文章

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解(一)进程概述1、基本概念2、三维度看待进程3、引入多道编程模型(1)CPU利用率与进程数关系(2)从三个视角看多进程 4、进程的产生和消亡(1&#xf…

go 编译apk

首先进行安装go 安装 wget https://studygolang.com/dl/golang/go1.21.5.linux-amd64.tar.gz tar zxvf go1.21.5.linux-amd64.tar.gz mv go /usr/local/ vim /etc/profile # 进行配置环境变量: export GOROOT/usr/local/go export PATH$PATH:$GOROOT/bin # 保存退…

算法Day28 二进制差异序列(格雷码)

二进制差异序列(格雷码) Description n 位二进制差异序列是一个由2^n个整数组成的序列,其中: 每个整数都在范围[0, 2^n - 1]内(含0和2^n - 1) 第一个整数是0 一个整数在序列中出现不超过一次 每对相邻整数…

LeetCode-1008. 前序遍历构造二叉搜索树【栈 树 二叉搜索树 数组 二叉树 单调栈】

LeetCode-1008. 前序遍历构造二叉搜索树【栈 树 二叉搜索树 数组 二叉树 单调栈】 题目描述:解题思路一:题目大致意思就是给定一个二叉树的前序遍历,求对应的二叉搜索树。一种比较特殊的点是「二叉搜索树」的中序遍历的结果是【有序序列】&am…

参数占位符#{}和${}

#是预处理而$是直接替换 Mybatis在处理#{}时,会将SQL中的#{}替换成占位符?,再使用preparedStatement的set方法来赋值。而Mybatis在处理 时,是将 {}时,是将 时,是将{}直接替换成变量的值 我们分别使用#{}和…

热电厂发电机组常见故障及预测性维护方法

热电厂的发电机组是关键的能源生产设备,在电力供应中扮演着关键角色。但经过长期运行和高负荷工作,一旦发生故障,可能导致停机、设备损坏甚至引发严重事故。因此,实施有效的预测性维护方法对于确保发电机组的稳定运行至关重要。本…

vue3封装接口

在src下面创建一个文件夹任意名称 我拿这个名字举例子了apiService 相当于创建一个新的文件 // 封装接口 // apiService.js import axios from axios;// 接口前缀 const API_BASE_URL 前缀;接口后缀export const registerUser async (fileData) > {try {const response …

Node CLI 之 Yargs (2)

什么是 yargs? yargs 是一个用于处理命令行参数的 Node.js 库 安装 yargs npm install yargs简单例子 不定义任何选项,直接便可以使用 定义命令 const yargs require(yargs)yargs.command(hello, Prints hello world, (yargs) > {}, (argv) >…

栈(深入理解栈是什么)

这里写目录标题 栈概念栈的初始化栈的溢出函数的栈帧函数的返回 栈 概念 英文:stack,也叫做堆栈。 特点:先进后出。 栈的两个基本操作,也就是入栈和出栈。都是通过SP指针来维护。C语言中的函数的局部变量,传递的实参…

datav-实现轮播表,使用updateRows方法-无缝衔接加载数据

前言 最近在做大屏需求的时候,遇到一个轮播数据的需求,查看datav文档发现确实有这个组件 但这个组件只提供了一次加载轮播的例子,虽然提供了轮播加载数据updateRows方法 但是文档并没有触发事件,比如轮播完数据触发事件&#xf…

RocketMQ-RocketMQ高性能核心原理节点(流程图)

NamesrvServer启动流程图: namesrvServer启动简图: Broker服务启动过程流程图 Broker服务启动过程流程简图 整体RPC框架流程如下图 client: DefaultMQProducer

CTF刷题记录

刷题 我的md5脏了KFC疯狂星期四坤坤的csgo邀请simplePHPcurl 我的md5脏了 g0at无意间发现了被打乱的flag:I{i?8Sms??Cd_1?T51??F_1?} 但是好像缺了不少东西,flag的md5值已经通过py交易得到了:88875458bdd87af5dd2e3c750e534741 flag…

2024美赛备战1--数据处理(数据预处理,异常值处理,预测模型,插值拟合 *****必看****)

1.数据预处理 所谓数据预处理,就是指在正式做题之前对数据进行的一些处理。在有些情 况下,出题方提供的数据或者网上查找的数据并不能直接使用,比如缺少数据甚 至是异常数据,如果直接忽略缺失值,或者没发现异常数据&am…

idea java 创建 hellword 项目

1.概要 建立一个最简单的工程,开始编码。 2.试验过程 2.1 创建的过程很简单,除了第一个窗口选择“java 模块”,其他的都是下一步。 2.2 还有就是刚创建的工程什么都没有需要,自己创建一个启动的类和启动函数。 2.3 运行和运行…

随机生成验证码的jar包

这是已经开发好的验证码,咱们直接调用接口,拿过来直接用就可以了 链接:https://pan.baidu.com/s/1QMPhW5UzxmhIa7THFab5hw 提取码:6666 下面演示一下: 首先创建一个Code来先生成随机验证码,然后传…

一个音乐能够做成二维码吗?音乐的活码制作技巧

一个音乐能够做成二维码后展示吗?现在以二维码为载体来储存内容的方式越来越常见,比如图片、文件、视频、音频都可以做成二维码展示,人们也更习惯去扫码获取内容。音频作为日常工作生活中常用的一种内容,可以用音频二维码生成器来…

如何在Word中简洁地插入代码

如何在Word中简洁地插入代码 背景: ​ 最近在一写一些论文或者报告的时候,需要将源代码放在论文的最后,有一个很头疼的问题,如果直接把代码从编辑器复制到word中,就变成了下面这个样子: 这有点丑陋啊&…

2023-12学习笔记

1.NonNull要手动写无参构造器 这是一个我今天研究了很久的问题,开始不知道原因是在这里,还在那想是不是Data覆盖了无参构造,结果当然不是。先说下解决历程 1.问题起因 通过RequestBody接收前端报文的时候报错,大致是说我构造方…

【算法提升—力扣每日一刷】五日总结【12/06--12/10】

2023/12/06 力扣每日一刷:206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2…

马云说的AI电商真的要来了?AR技术虚拟试穿公司ZERO10引入AI人工智能模型,未来试衣间就应这样!

ZERO10 是一家提供虚拟试穿体验的公司,他们基于自家的 AR 技术,提供高度逼真且顶尖的虚拟试穿体验。与现有的技术不同,他们的生成式人工智能试穿技术只需要 1-5 张用户照片,就可以实现虚拟试穿。这种方法为规模化应用提供了巨大机…