SpringBoot面试热题

时间:2024-10-26 07:02:53

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 中的过滤器和拦截器使用了责任链模式,多个过滤器和拦截器按照一定顺序执行,每个过滤器和拦截器可以拦截请求或者响应并做出相应的处理。