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 中的过滤器和拦截器使用了责任链模式,多个过滤器和拦截器按照一定顺序执行,每个过滤器和拦截器可以拦截请求或者响应并做出相应的处理。
相关推荐
pengyu3 分钟前
【Java设计原则与模式之系统化精讲:零】 | 编程世界的道与术(理论篇)
java·后端·设计模式
Aurora_NeAr4 分钟前
深入浅出Docker
后端
程序员岳焱10 分钟前
16.Java Annotation注解:元数据与代码增强
java·后端·编程语言
瀚海澜生11 分钟前
redis系列(2)——AOF日志和RDB快照
后端
保持学习ing27 分钟前
黑马Java面试笔记之 集合篇(算法复杂度+ArrayList+LinkedList)
java·笔记·算法·面试
面朝大海,春不暖,花不开1 小时前
Spring Security默认配置覆盖指南
java·后端·spring
Java技术小馆2 小时前
打印高质量日志的10条军规
java·后端·面试
每次的天空2 小时前
Android第十四次面试总结
android·面试·职场和发展
Jackson__2 小时前
聊一下HTTP 与 HTTPS 的区别,以及HTTPS 的加密方式
前端·面试
陈随易3 小时前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·后端·程序员