返回随笔Java全栈
进行中ENGINEERING NOTE

Spring 面试速查表

整理 Spring 的 IoC、DI、AOP、事务管理、MVC 与依赖注入等核心问题,并结合代码解释常见面试概念。

SpringBoot面试

Spring


说一下你对Spring的理解

Spring框架有四个特点:

  • IoC框架:通过控制反转实现对象的创建和依赖管理。开发者只要定义好bean和依赖关系,剩下交给spring自动注入。
  • 面向切片编程:允许开发者横切关注点。
  • 事务管理:Spring提供了一致的事务管理接口。
  • MVC框架。

Spring的核心思想

  • IoC控制反转
  • DI依赖注入
  • AOP面向切片编程

Spring Ioc

即控制反转。一般我们使用new来获得对象,但是IoC思想使用IoC容器帮助我们实例化对象。可以大大降低对象间的耦合度。

Spring AOP

面向切面编程。能够将那些与业务无关,却又为业务所共同调用的逻辑封装起来,降低系统的耦合度。 在AOP中,一个程序最小的单元是切面。一个切面包括很多类型和对象,对他们进行统一管理。 在AOP中,功能分为核心功能和周边功能,这两项功能独立进行开发,互补耦合。在最后将切面功能和核心功能编制在一起,这就是AOP。

Spring IoC是怎么实现的

  • 反射:Spring IoC使用Java反射机制动态地加载类与方法。
  • 依赖注入:容器负责管理程序组件之间的依赖关系。
  • 工厂模式:容器作为工厂负责实例化Bean并管理它们的生命周期
  • 容器实现:使用BeanFactory来管理Bean

Spring AOP是怎么实现的

基于动态代理技术。

  • 基于JDK的动态代理
  • 基于CGLIB的动态代理

怎么理解SpringIoC

IoC即控制反转,是一种设计思想。传统的Java程序中,在对象内部使用new创建对象,属于程序主动创建依赖对象。 在Spring中,有专门的容器控制对象。 所谓控制,就是对象的创建、初始化、销毁。所谓反转,是反转的控制权,对象的控制完全脱离了我们,而是将控制权交给了Spring。

依赖倒置、依赖注入

  • 依赖倒置:高层模块不依赖底层模块,它们共同依赖同一个抽象。抽象不依赖实现细节,实现细节依赖抽象。
  • 依赖注入:不通过new新建对象,而是将依赖的类的对象在外部创建好之后,注入给类来使用。

怎么实现依赖注入

  • 构造器注入(最推荐)

@Autowired public UserServiceImpl(UserMapper userMapper, StringRedisTemplate stringRedisTemplate, JavaMailSender mailSender) { this.userMapper = userMapper; this.stringRedisTemplate = stringRedisTemplate; this.mailSender = mailSender; } ```

  • Setter方法注入(会导致依赖未完全初始化)

@Autowired public void setOcMapper(OcMapper ocMapper) { this.ocMapper = ocMapper; } ```

  • 字段注入(会隐藏实际依赖关系,违反依赖导致原则,不推荐)

@Autowired private OcMapper ocMapper; ```