当前位置: 首页 > article >正文

SpringBoot面试热题

1.Spring IOC(控制反转)和AOP(面相切面编程)的理解

控制反转意味着将对象的控制权从代码中转移到Spring IOC容器。
本来是我们自己手动new出来的对象,现在则把对象交给Spring的IOC容器管理,IOC容器作为一个对象工厂,管理对象的创建和依赖关系。
控制反转是一种思想,依赖注入是控制反转的实现方式,通过IOC容器自动将依赖关系注入到需要它们的对象中。
Spring IOC的好处:

  • 集中统一管理对象,降低耦合度。
  • 便于单元测试、处理复杂对象创建和依赖关系、实现单例等。
  • Spring提供了完整的Bean生命周期管理,包括对象增强(如AOP)。

所谓的「面向切面编程」在我理解下其实就是在方法前后增加非
业务代码AOP 底层的技术是动态代理,在Spring内实现依赖的是BeanPostProcessor
比如我们需要在方法上注入些「重复性」的非业务代码,就可以利用Spring AOP
Spring AOP 解决的是 非业务代码抽取的问题

你们项目一般是怎么把对象交给IOC容器管理的?(换个问法:一般是怎么定义Bean的?)
Spring提供了4种方式,分别

1):注解
2):XML
3):JavaConfig
4):基于GroovyDSL配置
一般项目我们用注解或XML比较多,少部分用JavaConfig
日常写业务代码一般用注解来定义各种对象,责任链这种一般配
置在XML,「注解」解决不了的就用JavaConfig

2.Spring、SpringMVC、SpringBoot有什么区别?

pring+spring MVC+mybatis=传统ssm项目,spring负责本地的bean管理和事务处理,spring MVC负责对接web。spring boot则是综合了这俩,延展出来的新生态企业应用级快速开发架构,使各位cv工程师专注于敲代码,而不是去搞传统ssm那套繁琐配置。
因此,SpringBoot可以看作是在 Spring 的基础上,通过自动配置和约定优于配置的方式,提供了更加简单、快速的开发体验。而 SpringMVC 则是 Spring 框架中用于构建 Web 应用程序的模块。

3.SpringBoot实现自动化配置的原理

自动配置是通过@EnableAutoConfiguration注解实现的。这个注解会通过@import注解导入
AtuoConfigurationlmportSelector类,这个类会扫描META-INF/Spring.factories文件,这个文件里面定义了所有的自动配置类,这些配置类上可能存在条件注解,spring boot启动的时候根据这些注解,加载这些自动配置类。
1.自定义自动配置类步骤
定义一个类使用Configuration注解修饰;
定义META-INF/Spring-factories文件,向EnableAutoConfiguration中注入这个类

4.Spring 框架中都用到了哪些设计模式?

Spring 框架中使用了许多设计模式,以下列举一些比较重要的:

  • 单例模式:Spring 的 Bean 默认是单例模式,通过 Spring 容器管理 Bean 的生命周期,保证每个 Bean 只被创建一次,并在整个应用程序中重用。
  • 工厂模式:Spring 使用工厂模式通过 BeanFactory 和 ApplicationContext 创建并管理 Bean 对象。
  • 代理模式:Spring AOP 基于动态代理技术,使用代理模式实现切面编程,提供了对 AOP 编程的支持
  • 观察者模式:Spring 中的事件机制基于观察者模式,通过 ApplicationEventPublisher 发布事件,由
    ApplicationListener 监听事件,实现了对象间的松耦合。
  • 模板方法模式:Spring 中的 JdbcTemplate 使用了模板方法模式,将一些固定的流程封装在父类中,子类只需实现一些抽象方法即可。
  • 策略模式:Spring 中的 HandlerInterceptor 和 HandlerExecutionChain 使用了策略模式,允许开发者自定义处理器拦截器,按照一定顺序执行。
  • 责任链模式:Spring 中的过滤器和拦截器使用了责任链模式,多个过滤器和拦截器按照一定顺序执行,每个过滤器和拦截器可以拦截请求或者响应并做出相应的处理。

http://www.kler.cn/news/365926.html

相关文章:

  • ubuntu20.04上使用 Verdaccio 搭建 npm 私有仓库
  • 微信小程序中关闭默认的 `navigationBar`,并使用自定义的 `nav-bar` 组件
  • JavaWeb 23.一文速通npm的配置和使用
  • 算法革新决定未来!深挖数字北极星3.0背后的技术逻辑
  • 深入了解 kotlinx-datetime:配置与使用指南
  • 算法剖析:二分查找
  • 麒麟v10 arm64 部署 kubesphere 3.4 修改记录
  • C#与Sqlite数据库
  • 01. 初识C++
  • 钉钉录播抓取视频
  • UML 总结(基于《标准建模语言UML教程》)
  • HW支持-定时扫描局域网内所有设备MAC不在白名单则邮件提醒
  • winmm劫持详解
  • postman使用——在公司的项目落地回顾总结
  • 【计算机操作系统】课程 作业二 进程与线程 408考研
  • uniapp使用easyinput文本框显示输入的字数和限制的字数
  • WUP-MY-POS-PRINTER 旻佑热敏打印机票据打印uniapp插件使用说明
  • WebGL 3D基础
  • 常见Linux命令笔记
  • 【python爬虫】request发请求时需要携带cookies请求举例
  • 计算机网络:网络层 —— IPv4 协议的表示方法及其编址方法
  • 定位基站共线
  • 【卡尔曼滤波】观测模型包含输入的线性卡尔曼滤波
  • C++的汉诺塔
  • 【C语言教程】【嵌入式编程】(五)驱动开发实战(六)高级实践项目(七)附录
  • 10分钟使用Strapi(无头CMS)生成基于Node.js的API接口,告别繁琐开发,保姆级教程,持续更新中。