Spring 面试速查表
整理 Spring 的 IoC、DI、AOP、事务管理、MVC 与依赖注入等核心问题,并结合代码解释常见面试概念。
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; ```