【面试高高手】——Spring(12题)

news2024/12/25 11:23:23

文章目录

    • 1.Spring是什么?
    • 2.为什么需要Spring?
    • 3.说下你对Spring的AOP、IOC的理解?
    • 4.基于java的AOP实现有哪些?
    • 5.AOP的原理?
    • 6.如何使用Java实现动态代理?
    • 7. Spring AOP和AspectJ AOP有什么区别?
    • 8.SpringAOP通知类型?
    • 9. springbean的生命周期
    • 10.什么是SpringMVC?
    • 11.SpringMVC的请求流程
    • 12.SpringMVC的核心组件有哪些?

1.Spring是什么?

Spring是一个开源的、轻量级的Java应用开发框架。通过依赖注入(Dependency Injection)和面向切面编程(Aspect-oriented Programming)等技术,使得开发者可以更加方便地开发可扩展模块化松耦合的应用程序,极大提高了开发效率。

2.为什么需要Spring?

Spring是一个开源的Java应用程序框架,它提供了一种构建和管理企业级应用程序的方式。Spring的存在有多种原因,它为Java开发者提供了许多重要的好处和功能,包括:

  • 简化开发:Spring框架大大简化了Java应用程序的开发。它提供了许多开箱即用的功能,如依赖注入、AOP(面向切面编程)、事务管理等,这些功能可以减少开发人员的工作量。

  • 松散耦合:Spring鼓励松散耦合的设计,使得组件之间的依赖性更低。这有助于提高代码的可维护性、可扩展性和可测试性。

  • 依赖注入:Spring框架支持依赖注入(DI),使得组件之间的依赖关系更容易管理。通过DI,您可以将对象的依赖关系委托给Spring容器,而不是在代码中硬编码。

  • 面向切面编程(AOP):Spring支持AOP,这允许您将横切关注点(如日志记录、安全性、事务管理)与主要业务逻辑分离开来,提高了代码的可重用性和清晰度。

  • 声明式事务管理:Spring提供了声明式事务管理的支持,使得管理数据库事务变得更加容易。这可以帮助确保数据的一致性和可靠性。

  • 集成各种技术:Spring可以与各种不同的技术集成,包括各种持久化框架(如Hibernate、JPA)、消息队列、Web框架(如Spring MVC)、安全框架等等。

  • 测试支持:Spring的设计使得单元测试和集成测试变得更加容易。您可以使用Spring的测试框架来编写和运行测试,以确保代码的质量和稳定性。

  • 模块化:Spring框架是模块化的,您可以选择只使用您需要的模块,而不必引入整个框架。这有助于减小应用程序的体积,并提高性能。

  • 社区支持:Spring拥有一个庞大的社区和活跃的开发团队,因此可以获得广泛的支持、文档和教程。

3.说下你对Spring的AOP、IOC的理解?

  • AOP:AOP的全称是Aspect Orient Programming,即面向切面编程。是对OOP(Object Orient Programming)的一种补充,专门用于处理一些具有横切性质的服务。常常用于日志输出、安全控制、错误处理、权限管理等。降低代码的重复性,提高代码的可维护性和可复用性。

  • IOC(Inversion Of Controll,控制反转):是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。对象与对象之间松散耦合,也利于功能的复用。

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是编译时增强,基于字节码操作(Bytecode Manipulation)。
  • AspectJ相比于Spring AOP功能更加强大,
  • Spring AOP相对来说更简单。

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等异常解析器。

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

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

相关文章

518抽奖软件,支持半透明框,让界面布局更美观规整

518抽奖软件简介 518抽奖软件,518我要发,超好用的年会抽奖软件,简约设计风格。 包含文字号码抽奖、照片抽奖两种模式,支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 半透明框的用途 把零散的界面元素统一放置在…

3秒钟解析超买超卖和Renko图表关系

不管是刚进入市场中的外汇新手,还是已经在外汇市场中赚的盆满钵满,只要还是外汇市场中的一份子,一定在不止一次听说过超买和超卖。今天FPmarkets澳福和各位投资者一起探讨超买超卖和Renko图表的关系。 超买在FPmarkets看来就是指大部分市场参…

【Git】Deepin提示git remote: HTTP Basic: Access denied 错误解决办法

git remote: HTTP Basic: Access denied 错误解决办法 1.提交代码的时候提示2. 原因3.解决方案 1.提交代码的时候提示 git remote: HTTP Basic: Access denied 错误解决办法 2. 原因 本地git配置的用户名、密码与gitlabs上注册的用户名、密码不一致。 3.解决方案 如果账号…

9+铜死亡+缺氧+分型+单细胞+实验生信思路

今天给同学们分享一篇铜死亡缺氧分型实验的生信文章“Unraveling Colorectal Cancer and Pan-cancer Immune Heterogeneity and Synthetic Therapy Response Using Cuproptosis and Hypoxia Regulators by Multi-omic Analysis and Experimental Validation”,这篇文…

vscode快捷生成html标签

vscode快捷生成代码片段 ul>li*2.silder会生成如下代码片段 再或者 ul>li*6.silder>p.silder$会生成如下代码片段 如果页面中涉及到上面这种情况的代码块的时候可以使用这种方法快捷生成对应的代码块

freeswitch-02

文章目录 1. 拨号计划1.1 定义1.2 XML Dialplan1.2.1 配置文件的结构1.2.2 默认配置文件简介 1.3 正则表达式1.4 通道变量1.5 工作机制1.6 常用的Dialplan App1.7 小结 2. SIP协议2.1 SIP协议基础2.2 HTTP协议和SIP协议2.3 3PCC 3. 媒体3.1 媒体处理3.1.1 音频编码3.1.2 透传、…

多路复用select epoll

目录 一、什么是多路复用: 二、select 1 基本原理 2 参数 3 使用例子 4 select的缺点 三、epoll 使用用例 一、什么是多路复用: 多路: 指的是多个socket网络连接;复用: 指的是复用一个线程、使用一个线程来检查多个文件描述符(Socke…

OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(2)如何迭代开发提示词

迭代/Iterative 在机器学习中,您经常有一个想法,然后实现它。编写代码,获取数据,训练模型,这就给您一个实验结果。然后您可以查看该输出,进行错误分析,找出哪些地方工作或不工作,然后…

瞬态执行攻击与防御的评估

作者:Claudio Canella, Jo Van Bulck, Michael Schwarz, Moritz Lipp, Benjamin von Berg, Philipp Ortner, Frank Piessens, Dmitry Evtyushkin, Daniel Gruss: 标题:A Systematic Evaluation of Transient Execution Attacks and Defenses. 发布&#…

写代码生成流程图

我们在写文档,博客的时候,一般都会使用markdown语法,最常见的就是一些github开源项目的README。有时候会去画一些流程图,例如使用process.on或者xmind等第三方网站,然后截图插入到文档中。 今天我们介绍一种使用代码直…

如何用手机给自己拍摄的视频静音?

我们在分享视频的时候常常会遇到这种情况,视频有杂音或音乐声太大,这个时候就需要用到视频静音这个功能了,将视频静音后,可以根据自己的需求重新配乐或配音,下面附上详细操作步骤,大家看好学好!…

nginx配置密码访问

安装htpasswd 因为需要使用到htpasswd,htpasswd是Apache服务器中生成用户认证的一个工具,如果未安装,则使用如下命令安装htpasswd。 yum install -y httpd-tools设置用户名和密码 htpasswd 安装成功后,就可以设置用户名和密码&am…

搭建智能桥梁,Amazon CodeWhisperer助您轻松编程

零:前言 随着时间的推移,人工智能技术以惊人的速度向前发展,正掀起着全新的编程范式革命。不仅仅局限于代码生成,智能编程助手等创新应用也进一步提升了开发效率和代码质量,极大地推动着软件开发领域的快速繁荣。 当前…

火车头采集器python CHATGPT/AI改写插件使用教程!

大家好我是淘小白,关于火车头的AI改写插件的环境配置和使用教程,今天来给大家整理一下,请购买过的朋友,按照这个教程自行操作~ 1、规则&插件 这是我们拿到的演示规则和插件 2、配置环境 首先,要先安装Python&…

如何通过bat批处理实现快速生成文件目录,一键生成文件名和文件夹名目录

碰对了情人,相思一辈子。 具体方法步骤: 一、创建一个执行bat文件(使用记事本即可); 1、新建一个txt文本空白记事本文件 2、复制以下内容进记事本内 dir/a/s/b>LIST.TXT (其中LIST.TXT文件名是提取后将…

“益路同行”专访第0002期—张掖市汇仁爱心公益协会创始人谢建英

中国善网在本届(第十届)慈展会上特别推出了《益路同行》采访栏目,《益路同行》栏目旨在寻觅公益之路上同行者的故事,挖掘公益更深层次的内涵,探索新时代公益发展道路。希望公益企业、人物、故事被更多人看到&#xff0…

RFID服装工位管理提高生产管理效率

RFID服装工位管理是一种通过使用RFID电子标签来提高制造企业生产管理效率的方法,在传统的制造企业中,生产流程通常以单件为主,当生产环节繁复且工序众多时,容易出现各种问题。特别是在劳动密集型行业,如服装制造业&…

Mini Linux嵌入式设备服务器

Digi International推出了具有Digi Embedded Linux的Digi Connect ME 9210。Digi Embedded Linux是为在Digi嵌入式模块和微控制器上开发而优化的最新版本。高性能嵌入式开发服务器大约只有一对骰子大小,是嵌入式Linux上最小的。这使OEM可以在空间受限的设备中使用Li…

StarRocks数据导入

1、相关环境 Flink作为当前流行的流式计算框架,在对接StarRocks时,若直接使用JDBC的方式"流式"写入数据,对StarRocks是不友好的,StarRocks作为一款MVCC的数据库,其导入的核心思想还是"攒微批降频率&qu…

Unity把UGUI再World模式下显示到相机最前方

Unity把UGUI再World模式下显示到相机最前方 通过脚本修改Shader 再VR里有时候要把3D的UI显示到相机最前方,加个UI相机会坏事,可以通过修改unity_GUIZTestMode来解决。 测试用例 测试用例如下: 场景包含一个红色的盒子,一个UI…