【面试题】——Spring
1.Spring是什么?
Spring是一个开源的Java应用框架,它提供了广泛的基础设施支持,用于构建Java应用程序。极大提高了开发效率。它提供了一种轻量级的编程模型,通过依赖注入(Dependency Injection)和面向切面编程(Aspect-oriented Programming)等技术,使得开发者可以更加方便地开发可扩展、模块化和松耦合的应用程序。
2.为什么需要Spring?
3.说下你对Spring的AOP、IOC的理解?
-
AOP
AOP的全称是Aspect Orient Programming,即面向切面编程。是对OOP(Object Orient Programming)的一种补充,专门用于处理一些具有横切性质的服务。常常用于日志输出、安全控制、错误处理、权限管理等。
AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在编译或运行的时候,再将这些代码应用到需要执行的地方。AOP的主要目标是提供一种方式来模块化横切关注点,以降低代码的重复性,提高代码的可维护性和可复用性。 -
IOC(Inversion Of Controll,控制反转)
是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。对象与对象之间松散耦合,也利于功能的复用。Spring的IOC其实就是一个Map
4.基于java的AOP实现有哪些?
AspectJ、Spring AOP、Cglib、JBoss AOP
5.AOP的原理?
连接点(Join point):指程序运行过程中所执行的方法。在Spring AOP中,一个连接点总代表一个方法的执行。
切面(Aspect):被抽取出来的公共模块,可以用来会横切多个对象。Aspect切面可以看成 Pointcut切点 和 Advice通知 的结合,一个切面可以由多个切点和通知组成。在Spring AOP中,切面可以在类上使用 @AspectJ 注解来实现。
切点(Pointcut):切点用于定义 要对哪些Join point进行拦截。
通知(Advice):指要在连接点(Join Point)上执行的动作,即增强的逻辑,比如权限校验和、日志记录等。通知有各种类型,包括Around、Before、After、After returning、After throwing。
目标对象(Target):包含连接点的对象,也称作被通知(Advice)的对象。 由于Spring AOP是通过动态代理实现的,所以这个对象永远是一个代理对象。
织入(Weaving):通过动态代理,在目标对象(Target)的方法(即连接点Join point)中执行增强逻辑(Advice)的过程。
引入(Introduction):添加额外的方法或者字段到被通知的类。Spring允许引入新的接口(以及对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
6.如何使用Java实现动态代理?
7. Spring AOP和AspectJ AOP有什么区别?
Spring AOP是属于运行时增强,而AspectJ是编译时增强。Spring AOP基于代理(Proxying),而AspectJ基于字节码操作(Bytecode Manipulation)。
Spring AOP已经集成了AspectJ,AspectJ应该算得上是Java生态系统中最完整的AOP框架了。AspectJ相比于Spring AOP功能更加强大,但是Spring AOP相对来说更简单。
如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择AspectJ,它比SpringAOP快很多。
8.SpringAOP通知类型?
- 前置通知(Before Advice)
- 后置通知(After Advice)
- 环绕通知(Around Advice)
- 返回通知(After Returning Advice)
- 异常通知(After Throwing Advice)
9. springbean的生命周期


Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化
Bean实例化后对将Bean的引入和值注入到Bean的属性中
如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法
如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。
如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。
如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。
此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁。
如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。
10.什么是SpringMVC?
Spring MVC是Spring框架的一部分,它是一个用于构建Web应用程序的模块,提供了一个基于MVC(模型-视图-控制器)设计模式的框架,用于开发灵活、可维护和可扩展的Web应用程序。
11.SpringMVC的请求流程
12.SpringMVC的核心组件有哪些?
-
DispatcherServlet(前端控制器): DispatcherServlet是Spring MVC的前端控制器,它接收所有的HTTP请求并负责将请求分派给合适的控制器处理。DispatcherServlet还协调视图的渲染过程。
-
HandlerMapping(处理器映射器): HandlerMapping负责将HTTP请求映射到合适的控制器处理方法上。Spring MVC提供了多种HandlerMapping实现,包括RequestMappingHandlerMapping和BeanNameUrlHandlerMapping等。
-
Controller(控制器): 控制器是Spring MVC中的一个关键组件,它是处理HTTP请求的Java类。控制器包含处理方法,这些方法负责执行具体的业务逻辑,并返回模型数据和视图名称。
-
ModelAndView(模型和视图): ModelAndView是一个封装了模型数据和视图名称的对象。控制器方法通常返回一个ModelAndView,其中包含要传递给视图的数据和要渲染的视图的名称。
-
ViewResolver(视图解析器): 视图解析器负责将逻辑视图名称解析为实际的视图对象。Spring MVC支持多种视图解析器,如InternalResourceViewResolver用于解析JSP视图、ThymeleafViewResolver用于解析Thymeleaf模板等。
-
Interceptor(拦截器): 拦截器允许在请求处理过程中执行预处理和后处理操作。拦截器可以应用于整个应用程序或特定的处理器。它们可以用于实现日志记录、权限检查、国际化等功能。
-
HandlerAdapter(处理器适配器): HandlerAdapter负责将HTTP请求分派给相应的控制器方法,并负责调用控制器方法。不同类型的控制器方法需要不同的适配器来处理,Spring MVC提供了多种适配器。
-
DataBinder(数据绑定): 数据绑定是Spring MVC中的一个核心功能,它将HTTP请求参数绑定到控制器方法的参数上。数据绑定还支持数据验证和类型转换。
-
View(视图): 视图负责渲染模型数据,通常是HTML页面或其他响应内容。Spring MVC支持各种视图类型,包括JSP、Thymeleaf、FreeMarker、JSON视图等。
-
ExceptionResolver(异常解析器): 异常解析器负责捕获和处理应用程序中的异常,并返回适当的错误响应。Spring MVC提供了DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver等异常解析器。
相关文章:
【面试题】——Spring
1.Spring是什么? Spring是一个开源的Java应用框架,它提供了广泛的基础设施支持,用于构建Java应用程序。极大提高了开发效率。它提供了一种轻量级的编程模型,通过依赖注入(Dependency Injection)和面向切面…...
【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...
毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计
基于stm32单片机的app视频遥控抽水灭火水泵小车设计 1、项目简介1.1 系统构成1.2 系统功能 2、部分电路设计2.1 L298N电机驱动电路设计2.2 继电器控制电路设计 3、部分代码展示3.1 小车控制代码3.1 水泵控制代码 4 演示视频及代码资料获取 1、项目简介 视频简介中包含资料http…...
编译原生安卓aosp源码,实现硬改以及定位
系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…...
找单身狗。一个数组中只有两个数字出现一次,其他数字出现了两次,编写一个函数找出这两个只出现一次的数字
例:在{1 2 3 4 5 6 1 2 3 4}找出5和6 方法二: 设计思想: 1.分组原理 (1)将所有数字进行异或,相同数字异或为零,所以只会剩5^6,即为异或的结果xor_result (…...
Java数据结构技巧
Java数据结构技巧 1、循环 for-each循环如果不是"[]"的数组类型,则需要提前判断数据结构是否为空,否则有可能会有空指针异常。 2、对于List对象的i到j位进行排序 for(List<String> now_result:result){List<String> sublist …...
easyui disabled 属性设置
1.设置disabled $("#id").attr("disabled",true); 或 $("#id").attr("disabled","随意字符"); easyui写法 $("#id").numberbox("textbox").attr("disabled", true); $("#id")…...
使用容器运行Nginx应用及Docker命令
目录 一、使用容器运行Nginx应用 1.1 使用docker run命令运行Nginx应用 1.1.1 观察下载容器镜像过程 1.1.2 观察容器运行情况 编辑 1.2 访问容器中运行的Nginx服务 1.2.1 确认容器IP地址 1.2.2 容器网络说明 1.2.3 在主机中使用curl命令容器IP地址访问 二、Docker命…...
fastapi 基本介绍+使用
FastAPI是一个基于Python 3.6的现代、快速(高性能)的web框架,它使用Starlette作为其底层Web框架。FastAPI有很好的文档和丰富的功能,包括自动为路由生成API文档、查询参数验证、依赖注入、WebSocket等等。 以下是一个FastAPI的基…...
C语言的结构体的认识
注:类似于①、②……是代码的编写顺序,也是对下方代码的注解 【①】、【②】……是用到了之前的代码 #include <stdio.h> //②定义生日结构体,必须声明在前面不然会报错,c语言是从上到下执行的(这点要注意&#…...
只通过在vimrc文件写东西来实现或安装vim的插件
2023年9月23日,周日上午 有时候觉得用插件管理器来安装插件太麻烦了, 所以我就在想能不能只通过在vimrc文件写东西来实现或安装vim的插件, 不过这样做肯定有很大的局限性,但我会尽量做到最好的效果 不定期更新 把下面这些代码…...
云原生Kubernetes:K8S存储卷
目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验 1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享…...
“五育”并举育人体系构建的实践研究课题实施方案
目录 一、研究背景与意义 二、课题理论依据 三、国内外研究情况与现状 四、研究目标...
小样本目标检测:ECEA: Extensible Co-Existing Attention for Few-Shot Object Detection
论文作者:Zhimeng Xin,Tianxu Wu,Shiming Chen,Yixiong Zou,Ling Shao,Xinge You 作者单位:Huazhong University of Science and Technology; UCAS-Terminus AI Lab 论文链接:http://arxiv.org/abs/2309.08196v1 内容简介: 1&…...
Android 10.0 系统开启和关闭黑白模式主题功能实现
1. 概述 在10.0的rom系统开发定制化中,在系统SystemUI的下拉状态栏中,产品开发功能需求要求添加黑白模式功能开关的功能,就是打开黑白模式,系统颜色就会变成黑白颜色, 关闭黑白模式开关系统就会变成彩色模式,所以就需要了解下系统是怎么设置黑白模式和彩色模式的,然后添…...
Linux-VI和VIM
目录 VI的使用 VI的三种模式 进入VI 切换至插入模式(Insert mode)编辑文件 Insert 的切换 退出VI及保存文件 搜索 快捷删除 光标定位到最后一行 VIM查找字符串 全匹配 模糊匹配(正则表达式) 快速查找…...
【送书】实现可观测性平台的技术要点是什么?
文章目录 实现可观测性平台的技术要点是什么?兼容全域信号量所谓全域信号量有哪些?统一采集和上传工具统一的存储后台自由探索和综合使用数据总结 实现可观测性平台的技术要点是什么? 随着可观测性理念的深入人心,可观测性平台已经开始进入了落地阶段…...
AUTOSAR汽车电子嵌入式编程精讲300篇-车载网络 CAN 总线报文异常检测
目录 前言 国内外研究现状 车载网络 CAN 总线威胁分析和报文异常检测研究...
基于MUSIC算法的二维超声波成像matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、基本原理 4.2、数学公式 4.3、实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................................…...
Linux0.11——第三回 做好访问内存的最基础准备工作
前面两回是把启动区的代码复制来复制去的,这里我们要讨论的就是操作系统怎么为程序访问内存的方式做初步规划的? 操作系统的代码最开头的 512 字节的数据,先从硬盘的启动区移动到了内存 0x7c00 处,然后又立刻被移动到 0x90000 处…...
WordPress和VuePress双站点配置指南:如何在单台云服务器上同时运行(基于宝塔面板)
WordPress与VuePress双站点高效部署实战:基于宝塔面板的云服务器资源整合方案 当个人开发者或小型团队需要在有限预算下同时维护动态博客和静态文档站点时,单台云服务器的资源整合能力就显得尤为重要。本文将分享如何通过宝塔面板这一可视化运维工具&…...
KMS_VL_ALL_AIO终极指南:5分钟搞定Windows与Office永久激活的简单教程
KMS_VL_ALL_AIO终极指南:5分钟搞定Windows与Office永久激活的简单教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经为Windows系统弹出"需要激活"的提示而烦恼…...
SEO_中小企业必备的快速见效SEO优化解决办法
SEO: 中小企业必备的快速见效SEO优化解决办法 在当前竞争激烈的市场环境中,中小企业如何迅速提升在搜索引擎上的曝光率,成为每个企业家关注的焦点。搜索引擎优化(SEO)不仅能帮助企业吸引更多潜在客户,还能显著提高网站…...
【架构实战】读写分离中间件对比(ShardingSphere/MyCat)
一、为什么需要读写分离 在大多数互联网应用中,读操作远多于写操作: 读请求:70-80% 写请求:20-30%单机数据库的问题: 主库:处理所有写请求 部分读请求↓ 连接池耗尽 → 响应变慢 → 用户投诉解决方案&a…...
Mem Reduct多语言界面配置指南:从基础设置到高级应用
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 功能…...
Paper2Slides API深度解析:FastAPI后端架构与RESTful接口设计终极指南
Paper2Slides API深度解析:FastAPI后端架构与RESTful接口设计终极指南 【免费下载链接】Paper2Slides "Paper2Slides: From Paper to Presentation in One Click" 项目地址: https://gitcode.com/gh_mirrors/pap/Paper2Slides Paper2Slides是一个革…...
基于springboot车辆管理系统设计与实现.7z(源码+论文)
[点击下载链接》》》] 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足,创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的…...
5分钟快速上手:用LeaguePrank打造你的专属英雄联盟游戏形象
5分钟快速上手:用LeaguePrank打造你的专属英雄联盟游戏形象 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款基于官方LCU API开发的开源工具,让你能够安全、合规地修改英雄联盟游戏界面…...
AI编程赋能研发效率:核心能力与实践经验总结
作为常年泡在代码里的开发者,想必大家都有过这样的体验:用AI插件补几行代码很快,但一到实际项目,环境配置、多任务并行、代码审查这些环节还是得靠人工一点点磨;不同的AI编程能力各有优势,切换适配却十分繁…...
Lychee-Rerank实战案例:专利文献检索中权利要求与技术方案的语义匹配
Lychee-Rerank实战案例:专利文献检索中权利要求与技术方案的语义匹配 1. 引言:当专利检索遇上语义匹配难题 如果你是专利工程师、知识产权分析师,或者从事技术研发工作,一定遇到过这样的场景:面对海量的专利文献&…...
