Spring框架-面试题核心概念
目录
1.Spring框架的作用是什么?
2. 什么是DI?
3.什么是AOP?
4.Spring常用注解
5.Spring中的设计模式
6.Spring支持的几种bean的作用域
7.Spring中Bean的生命周期?
8.Spring中的事务管理
9.Spring中的依赖注入方式有几种
10.Spring的配置方式有哪些
1.Spring框架的作用是什么?
要点:
Spring是一个开源框架,主要为了简化企业级应用的开发。它是一个IOC和AOP的容器框架。核心功能如下:
(1)DI依赖注入容器,实现面向接口、模块化开发。
(2)AOP面向切面容器,实现程序的动态统一增强。
(3)为不同的ORM技术提供Session管理和声明式事务管理,简化数据层开发。
(4)提供优秀的SpringMVC框架,简化界面层开发,也可以轻松整合其他MVC框架。
(5)提供Spring Boot快速配置,Spring Cloud微服务架构。简化各种企业级技术的实现:如NoSQL、大数据、分布式技术等等。
2. 什么是DI?
要点:
DI(Dependency Injection)是指依赖注入或者叫控制反转(IOC),指程序中对象所依赖的子对象不用在硬编码中创建,而是通过容器(如Spring)在运行时再注入进来。
DI使得模块间只依赖于接口,而不是实现类(实现类在运行时由容器注入),使得软件模块可以独立开发与测试,降低耦合度。
3.什么是AOP?
要点:
AOP(Aspect Oriented Programming)面向切面编程。可以在不修改原有代码的基础上为方法注入增强代码的一种方式。AOP是通过代理模式或者动态代理的方式,把外部代码织入到原有程序中的。AOP典型的应用场景就是事务,日志,权限,异常处理等。
AOP利用“横切"的技术,剖开封装的对象内部,并将影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,有利于未来的可操作性和可维护性。
4.Spring常用注解
要点:
(1)组件相关:
@Component 组件,例如工具类
@Service 在业务逻辑层使用
@Repository 在数据访问层使用
@Controller 控制器的声明
(2)依赖注入:
@Autowired:由Spring提供,按类型实现依赖注入
@Resource:由JSR-250提供
(3)配置注解:
@Configuration 声明当前类为配置类
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代<bean/>
@ComponentScan 设置包的扫描范围
(4)AOP注解:
@Aspect 声明一个切面(类上)
@After 后置通知
@Before 前置通知
@Around 环绕通知
@PointCut 声明切点
@Scope 设置Bean的作用范围
5.Spring中的设计模式
要点:
代理模式:在AOP使用动态代理实现切面编程
单例模式:在spring配置文件中定义的bean默认为单例模式。
模板方法模式:用来解决代码重复的问题。
前端控制器模式:Spring提供了DispatcherServlet来对请求进行分发。
依赖注入模式:贯穿于BeanFactory / ApplicationContext接口的核心理念。
工厂模式:BeanFactory用来创建对象的实例。
6.Spring支持的几种bean的作用域
要点:
singleton:单例,默认作用域,SpringIOC容器中只存在一个实例
prototype:每次通过Spring容器获取prototype定义的bean时,都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,
request:在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。
session:在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。
global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用 portlet context时有效。
7.Spring中Bean的生命周期?
要点:
Bean的生命周期经历了一系列方法,比较关键的过程有以下几点:
(1)实例化一个Bean,就是通常说的new;
(2)初始化:按照Spring上下文对实例化的Bean进行配置,也就是IOC注入。如果这个Bean的Spring配置中配置了init-method属性,会自动调用其配置的初始化方法
(3)Bean的调用:获取bean并进行调用;
(4)Bean销毁:当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法。如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。
8.Spring中的事务管理
要点:
作为企业级应用程序框架,Spring在不同的事务管理API之上定义了一个抽象层。而应用程序开发人员不必了解底层的事务管理API,就可以使用Spring的事务管理机制。Spring既支持编程式事务管理(也称编码式事务),也支持声明式的事务管理。
编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式事务中,必须在每个业务操作中包含额外的事务管理代码。
声明式事务管理:大多数情况下比编程式事务管理更好用。它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。事务管理作为一种横切关注点,可以通过AOP方法模块化。Spring通过Spring AOP框架支持声明式事务管理。
9.Spring中的依赖注入方式有几种
要点:
(1)set属性注入
(2)构造器注入
(3)静态工厂方法注入
(4)实例工厂方法注入
10.Spring的配置方式有哪些
要点:
Spring支持xml配置,注解配置以及JavaConfig配置三种形式。
(1)基于 xml 配置
<bean id=”dao” class=”com.demo.dao.impl.UserDaoImpl”></bean>(2)基于注解配置
可以通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML 来描述 bean 装配。默认情况下,Spring 容器中未打开注解装配
<beans><context:annotation-config/> </beans>(3) 基于 Java API 配置
Spring 的 Java 配置是通过使用 @Bean 和 @Configuration 来实现。
@Bean 注解扮演与 <bean /> 元素相同的角色。
@Configuration 标记配置类,替代了xml配置中的配置文件
相关文章:
Spring框架-面试题核心概念
目录 1.Spring框架的作用是什么? 2. 什么是DI? 3.什么是AOP? 4.Spring常用注解 5.Spring中的设计模式 6.Spring支持的几种bean的作用域 7.Spring中Bean的生命周期? 8.Spring中的事务管理 9.Spring中的依赖注入方式有几种 10.Sprin…...
Tomcat部署及优化
Tomcat部署及优化 一、Tomcat的介绍1.Tomcat核心组件2.Tomcat 功能组件结构3.Container 结构分析:4.Tomcat处理请求过程 二、Tomcat 部署步骤1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下2.安装JDK3.设置JDK环境变量4.编写一个java 简易的源代码…...
C++/C按照时间命名保存bin文件
背景 在Linux应用编程过程中,使用C或者C语言保存、读取bin文件是比较常见的需求。这里详细记录一下使用C保存bin文件,也可以使用C语言实现。 代码 C/C语言保存bin文件函数,C中也能使用 正确写入返回0,错误返回-1 // C 保存bi…...
面向多告警源,如何构建统一告警管理体系?
本文介绍告警统一管理的最佳实践,以帮助企业更好地处理异构监控系统所带来的挑战和问题。 背景信息 在云原生时代,企业IT基础设施的规模越来越大,越来越多的系统和服务被部署在云环境中。为了监控这些复杂的IT环境,企业通常会选…...
python 面向对象 -- 简单理解版
一、什么是面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。除了Python,Java也是一门面向对象的编程语言。 先来简单的了解下面向对象的一些基本特征。 类(Class): 用来描述具有相…...
SpringMVC 程序开发
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 什么是 Spring MVCMVC 定义 怎么学 Spring MVCSpring MVC 创建和连接创建 Spring MVC 项目RequestMapping 注解介绍PostMappi…...
使用单片机遇到的几个问题及解决方案1
1.为什么我跟着视频学习的过程中,我没有找到“端口"的选项呢?我甚至没有出现“其他插口”。 想要找到设备管理器最快的方法就是: 首先如果把输入法调为大写形式,然后按下“WINX”,再按“M”就会出现一个设备管理…...
vue项目中el-upload 组件添加token的方法
在使用el-upload的时候,上传文件到服务器,有时候后台要求上传token,怎么处理呢?以下是一个示例。 效果图 template中片段 <el-dialog :modal-append-to-body"false" title"上传文件" :visible.sync"…...
独立按键检测短按、长按,松手后响应操作
背景 有项目使用独立按键检测,短按、长按。根据使用效果,发现松手后,也就是按键弹起后响应操作比较好操作。 记得之前,博主写过一篇关于按键的检测的文章,但是过于复杂了。可能很难懂,这里就简单一点&…...
BurpSuite2023测试越权漏洞
BurpSuite2023测试越权漏洞 BurpSuite安装创建项目 - 打开内置浏览器越权漏洞测试问题处理 BurpSuite安装 官网下载社区版并安装,下载地址:链接: https://portswigger.net/burp 安装成功后图标 创建项目 - 打开内置浏览器 打开BurpSuite,…...
申请国家标准项目管理专业人员能力评级(CSPM)报名条件有哪些?
2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…...
代码随想录算法训练营第五十二天|300.最长递增子序列|674. 最长连续递增序列|718. 最长重复子数组
LeetCode300.最长递增子序列 动态规划五部曲: 1,dp[i]的定义:本题中,正确定义dp数组的含义十分重要。dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。为什么一定表示 “以nums[i]结尾的最长递增子序” ,…...
完全卸载mysql教程
引言 很多人因为第一次安装mysql导致安装错误,或者安装的数据库版本太高,比如mysql8.0版本,出现了很多问题,导致数据库无法使用,或者一些图形界面无法操作,想要卸载,重装稳定的mysql数据库&…...
4G开发板-安卓手机开发套件-MTK主板开发板定制
开发板是一种用于嵌入式系统开发的电路板,它包含了各种硬件组件,如中央处理器、存储器、输入设备、输出设备、数据通路/总线以及外部资源接口等。为了满足特定的开发需求,嵌入式系统开发者通常会根据项目要求来定制开发板,当然用户…...
人工智能十大新星揭晓,华人学者占90%
人工智能领域著名杂志 IEEE Intelligent Systems发布了 2022 年度“人工智能十大新星”(AIs 10 to Watch)名单 ,其中有九位都是华人研究者。知识人网小编推荐给大家。 近日,人工智能领域著名杂志 IEEE Intelligent Systems公布了 …...
ROS学习——通信机制(话题通信①—发布方实现)
2.1 话题通信 Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 040话题通信(C)1_发布方框架_Chapter2-ROS通信机制_哔哩哔哩_bilibili 一、ROS 中的基本通信机制主要有如下三种实现策略 话题通信(发布订阅模式服务通信(请求响应模式)参数服务器(参数共享模式) 二、…...
【运筹优化】最短路算法之SPFA算法 + Java代码实现
文章目录 一、SPFA算法简介二、SPFA算法思想三、Java代码实现四、测试 一、SPFA算法简介 SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA 最坏情况下复杂度和朴素 Bellman-Ford 相同…...
linuxOPS基础_linux权限管理
权限概述 什么是权限 在多用户计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权利。 在Linux 中分别有读、写、执行权限 \权限针对文件权限针对目录读r(read)表示可以查看文件内容;cat、less…表示可以(ls)查看目录中存在的文…...
linux安装homeassistant(智能设备远程控制开源框架)
1、安装docker 先切换到root 用户,先安装一些基本环境: yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云软件源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo然后安装 D…...
TensorRT Triton Inference Server: 版本 error魔术标记不匹配 , NGC使用
魔术标记不匹配错误Serialization assertion magicTagRead kMAGIC_TAG failed.Magic tag does not match 原因: 转换和推理使用的镜像的标签是相同的,但是转换的镜像中pip list得到trt版本为8.6.0,但是推理环境中 rootf2c810ba3976:/# /usr/…...
5分钟掌握游戏高清截图秘诀:SRWE窗口分辨率自定义完整教程
5分钟掌握游戏高清截图秘诀:SRWE窗口分辨率自定义完整教程 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾梦想为心爱的游戏角色拍摄一张高清壁纸,却发现游戏分辨率选项有限&…...
SDMatte在电商场景落地:商品主图自动去背景+透明PNG生成完整工作流
SDMatte在电商场景落地:商品主图自动去背景透明PNG生成完整工作流 1. 电商场景中的图像处理痛点 在电商运营中,商品主图的质量直接影响转化率。传统处理方式面临三大难题: 人工成本高:专业设计师处理一张图平均耗时15-30分钟边…...
nli-distilroberta-base实际项目:高校招生简章关键条款与考生疑问逻辑关系库构建
nli-distilroberta-base实际项目:高校招生简章关键条款与考生疑问逻辑关系库构建 1. 项目背景与需求 高校招生简章通常包含大量专业条款和政策说明,每年都会收到大量考生关于条款理解的咨询。传统的人工解答方式存在几个痛点: 效率低下&am…...
重构Sketch图层管理流程:RenameIt效率引擎突破设计协作瓶颈
重构Sketch图层管理流程:RenameIt效率引擎突破设计协作瓶颈 【免费下载链接】RenameIt Keep your Sketch files organized, batch rename layers and artboards. 项目地址: https://gitcode.com/gh_mirrors/re/RenameIt 在现代UI/UX设计工作流中,…...
测试用例设计-XMind
🚀 一、XMind 用例设计核心思路👉 和传统Excel不同,XMind强调:以“功能模块”为主干 以“用户场景”为分支 以“测试点”为叶子节点👉 本质结构:模块 → 场景 → 用例点 → 具体测试数据/预期📌…...
C#实战:基于WebAPI与Modbus构建EMS核心采集服务
1. 为什么需要EMS核心采集服务? 在工业现场,我们经常会遇到几十台甚至上百台智能电表、传感器等设备需要监控。这些设备可能来自不同厂家,使用不同的通信协议,数据格式也各不相同。想象一下,如果每个设备都需要单独开发…...
2-1爬取豆瓣电影数据
数据来源网站:https://movie.douban.com/chart import requests import json import timedef fetch_douban():all_movies []start 0limit 20print("开始爬取豆瓣电影榜单")headers {"User-Agent": "Mozilla/5.0","Referer&…...
相机潜能解锁:从限制突破到专业创作
相机潜能解锁:从限制突破到专业创作 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak OpenMemories-Tweak作为一款专为索尼相机设计的系统级解锁工具,通…...
HBuilderX + 极光推送踩坑实录:免费版为啥息屏收不到通知?手把手教你配置与避坑
HBuilderX与极光推送免费版避坑指南:破解息屏通知失效难题 早上八点,你的咖啡还没喝完,测试组的消息就炸开了锅——"昨晚推送的版本在息屏状态下根本收不到通知!"作为使用HBuilderX开发跨平台应用的团队,这个…...
系统架构设计师知识点21-40
21.ABSD方法的三个基础。①功能分解,使用已有的基于模块的内聚与耦合技术②选择架构风格实现质量和业务需求③软件模板使用22.ABSD方法是一个自顶向下,递归细化的方法,软件系统的体系结构通过该方法得到细化,直到能产生软件构件和…...
