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

文章目录

    • 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.rhkb.cn/news/142618.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联想详解AI导向基础设施 “软硬一体”赋能四大场景

9月25日,联想在杭州举办以“全栈智能 全程陪伴”为主题的新IT思享会,集中展示了联想基于新IT架构的全栈智能产品与服务,引领行业智能变革的强大实力。 当前,以ChatGPT为代表的AI模型席卷全球,不仅实现了AI技术质变性突…

电路常见的通信接口

1,TTL/232/485/422简介 串口 串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。是我们在硬件调试过程中最常见的一种通信方式。比如开发板和电脑之间,想要…

如何更改注册表使系统暂停更新时间延长

1、创建一个文本文件,命名为:“stopupdate.reg”,然后用记事本或者代码编辑器打开,复制以下代码: Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings] "F…

高手必备!电脑剪辑视频的实用方法

随着数码时代的到来,越来越多的人开始使用电脑剪辑视频。电脑剪辑视频不仅可以为日常生活留下美好回忆,还可以为专业人士提供更多的创作可能性。在本文中,我们将介绍两种电脑剪辑视频的方法,不需要专业技能,只需要一台…

嵌入式MCU都有什么高级用法?

嵌入式MCU都有什么高级用法? 您举的几个例子,确实是MCU外设的一些高端玩法。只是不知道您是否想过,既然这些机制是被 人设计出来的,那它就是种标准用法。从微控制器的发展历程来看,许多硬件机制都是有了实际 需求后才…

工业RFID识别设备可以在哪些行业应用?

工业识别设备主要是用于工业领域的RFID读写设备,它可以在产线、工厂、仓储物流等领域应用,非接触的实时读取标签信息,并且将读取的信息上传到电脑信息管理系统中。 工业RFID识别设备可以在哪些行业应用? 1、汽车行业 汽车制造业的产品结构复…

USB转换方案介绍

随着科技的不断发展,我们的生活中出现了越来越多的电子设备。然而,这些设备通常具有不同的连接端口和协议,这可能会使它们之间的连接变得困难。这时候,使用USB转换就成为了一种非常方便和实用的解决方法。 无论是在家庭、办公室还…

网络编程day03(UDP中的connect函数、tftp)

今日任务&#xff1a;tftp的文件上传下载&#xff08;服务端已经准备好&#xff09; 服务端&#xff08;已上传&#xff09; 客户端&#xff1a; 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h…

vue实现进度条+背景定位

最近在做一个数字孪生项目&#xff0c;用于展示地铁车辆的进场动画及部件&#xff0c;使用的vueunity&#xff0c;但是 unity模型在加载完成之前会有个加载进度条&#xff0c;页面背景色是黑色&#xff0c;中间只有个一进度条框 可以看到很单调很丑&#xff0c;并且客户也不满…

Linux上的Pip和Python升级指南

在Linux系统上&#xff0c;保持Pip和Python版本的最新状态对于顺利进行Python开发至关重要。通过升级Pip和Python&#xff0c;你可以享受到最新的功能、修复的bug以及提升的开发效率。本文将为你提供在Linux上升级Pip和Python的详细指南&#xff0c;助你打造更强大的开发环境。…

✔ ★ 算法基础笔记(Acwing)(六)—— 贪心【java版本】

贪心 一、 区间问题1. 区间选点2. 最大不相交区间数量3. 区间分组(用 堆top 代表区间 头头)POJ3614Sunscreen(优先队列贪心) 4. 区间覆盖 二、哈夫曼树1. 合并果子 三、排序不等式1. 排队打水 四、绝对值不等式货仓选址 五、推公式耍杂技的牛 一、 区间问题 1. 区间选点 原题…

气传导和骨传导耳机哪个好?气传导耳机好用吗?气传导耳机推荐

​气传导和骨传导耳机都是不入耳设计&#xff0c;骨传导是通过振动颅骨传达声音信号 骨传导耳机是一种能够通过振动颅骨来传达声音信号的耳机&#xff0c;其原理是利用骨传导技术&#xff0c;将声音信号通过颅骨传达到内耳&#xff0c;从而实现听觉效果&#xff0c;不过长时间佩…

YashanDB向量化执行引擎如何给海量数据分析提速

作者介绍&#xff1a;李伟超&#xff0c;数据库系统架构师&#xff0c;YashanDB架设技术开发负责人&#xff0c;10年以上数据库内核技术开发经验。 *全文4510个字&#xff0c;阅读时长约11分钟。 背景 海量数据OLAP场景&#xff0c;通常具有数据规模大、查询复杂度高、处理速…

9月27日星期三今日早报简报微语报早读

9月27日&#xff0c;星期三&#xff0c;早报简报微语早读分享。 1、兰州&#xff1a;拟明年起奖励医保参保人连续缴费&#xff0c;提高其住院报销比例&#xff1b; 2、中国民办教育协会&#xff1a;10月15日起全面禁止校外培训系误读误解&#xff1b; 3、山西修订未成年人保…

外包干了3个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;17年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

根据命令行参数动态导入模块或文件

需求 在命令行运行一个 python 文件&#xff0c;同时传入自定义参数&#xff1a; $ python main.py --nodeTable --actioncreate --data"{name: test2, is_sys_obj: False, encoding: UTF8,datconnlimit: -1, variables: []"希望 main.py 接收命令行参数&#xff0…

Flutter笔记:滚动之-无限滚动与动态加载的实现

Flutter笔记 无限滚动与动态加载的实现 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133342307 目 录…

Goby 漏洞发布|泛微 E-office flow_xml.php 文件 SORT_ID 参数 SQL 注入漏洞

漏洞名称&#xff1a;泛微 E-office flow_xml.php 文件 SORT_ID 参数 SQL 注入漏洞 English Name&#xff1a; Weaver E-office flow_xml.php file SORT_ID parameter SQL injection vulnerability CVSS core:7.8 影响资产数&#xff1a; 21632 漏洞描述&#xff1a; 泛微…

前端知识总结

在前端开发中&#xff0c;y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1&#xff0c;并将自增后的值赋给变量y。 具体来说&#xff0c;x是一种后缀自增运算符&#xff0c;表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…

linux使用操作[2]

文章目录 版权声明网络传输ping命令wget命令curl命令端口linux端口端口命令和工具 进程管理查看进程关闭进程 主机状态top命令内容详解磁盘信息监控 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程序员或相…