Java 基础 之sping相关面试高频考点总结

IOC-AOP

1.什么是 IOC?为什么要用 IOC?

IOC(控制反转):将对象的创建、依赖注入等管理工作交给 Spring 容器,开发者无需手动 new 对象,由容器统一管理对象生命周期与依赖关系。
使用 IOC 的原因:

  • 解耦:对象之间的依赖关系由容器管理,代码更灵活、易维护
  • 可复用:对象由容器统一管理,避免重复创建
  • 易测试:可以方便替换实现类,单元测试更简单
2.Spring Bean 的生命周期
  • 实例化:Spring 通过反射创建 Bean 对象
  • 属性填充:DI 注入依赖(@Autowired、@Value 等)
  • 初始化:执行初始化方法(@PostConstruct、afterPropertiesSet)
  • 使用:Bean 正常工作
  • 销毁:容器关闭时执行销毁方法(@PreDestroy、destroy)
3.什么是 AOP?AOP 有哪些核心通知类型?

AOP(面向切面编程):在不修改核心业务代码的前提下,对方法进行横向增强(如日志记录、权限校验、事务管理等),实现关注点分离。
核心通知类型:
@Before:目标方法执行前执行
@After:目标方法执行后执行(无论是否正常结束)
@AfterReturning:目标方法正常返回后执行
@AfterThrowing:目标方法抛出异常后执行
@Around:环绕通知,可在目标方法执行前后自定义增强逻辑(最灵活)

4.Spring AOP 的底层实现原理是什么?

Spring AOP 基于动态代理实现,根据目标类是否实现接口选择不同代理方式:
若目标类实现了接口:使用 JDK 动态代理,通过反射生成接口实现类代理对象。
若目标类未实现接口:使用 CGLIB 动态代理,通过继承目标类生成子类代理对象。

spring事务

1.什么是 Spring 事务?

保证数据库操作,要么全部成功,要么全部失败。

2.事务的 4 个特性(ACID)

原子性:要么全部成功,要么全部失败;
一致性:保证方法执行前后数据合法;
隔离性:多个事务互不影响;持久性:提交后永久生效;

3.@Transactional 工作原理

采用aop执行,方法前开启事务,方法结束关闭事务,方法异常回滚事务

4.事务传播行为

required:有事务就加入,没有就自己创建一个;
requires_new:每次自己创建新的事务;外层和新事务互不影响;
nested:嵌套事务 外层回滚我回滚,我回滚外层不回滚;

5.事务隔离级别

读已提交、读未提交、可重复读、串行化

6.事务不生效的 4 个经典场景

1、方法不是用public;2、方法内部调用方法(this.()),不走aop;3、捕获异常未抛出,spring不知道不回滚;4、抛出了非 RuntimeException/Error 类型的异常(默认不回滚)

Spring MVC

1.核心组件:

DispatcherServlet:前端控制器(总调度) dis pa cher
HandlerMapping:处理器映射器,找对应 Controller
HandlerAdapter:处理器适配器,调用 Controller e da p ter
ViewResolver:视图解析器 rui ze ao ver
View:视图渲染(JSP/Thymeleaf 等)

2.完整执行流程

1.用户发送请求 → 到达 DispatcherServlet
2.DispatcherServlet 找 HandlerMapping
3.HandlerMapping 根据 URL 找到对应 Controller,返回执行链
4.DispatcherServlet 找 HandlerAdapter
5.HandlerAdapter 调用 Controller 执行方法,返回 ModelAndView
6.DispatcherServlet 把 ModelAndView 交给 ViewResolver
7.ViewResolver 解析出具体 View(页面)
8.渲染视图 → 响应给用户

springboot

1.@SpringBootApplication 由哪 3 个核心注解组成?分别作用是什么?

@SpringBootConfiguration:本质是@Configuration,标记当前类为配置类,支持 JavaConfig 方式配置
@EnableAutoConfiguration:自动配置的核心开关,开启 Spring Boot 的自动装配能力
@ComponentScan:自动扫描组件,默认扫描当前包及其子包下的@Controller、@Service、@Repository、@Component等注解标注的类,将其注册到 Spring 容器

2.Spring Boot 自动配置的核心原理是什么?

由@EnableAutoConfiguration作为开关,通过SpringFactoriesLoader(SPI 机制),从META-INF/spring.factories文件中加载所有声明的自动配置类
每个自动配置类通过@ConditionalOnXXX系列条件注解进行过滤,只有满足所有条件(如类路径存在对应类、用户未自定义 Bean 等)的配置类才会生效
生效的自动配置类通过@Bean注解,自动创建对应的 Bean(如 DataSource、RedisTemplate),并读取application.yml中的配置注入属性
若用户手动创建了自定义 Bean,@ConditionalOnMissingBean会让自动配置失效,用户自定义配置优先级更高,最终实现 “开箱即用”。

3.自动配置中常用的条件注解有哪些?作用是什么?

@ConditionalOnClass kang di shen no
作用:类路径下存在指定的类时,当前配置类才生效
例子:@ConditionalOnClass(DataSource.class) → 只有项目里有 JDBC 相关类,才加载数据源自动配置
@ConditionalOnMissingBean
作用:Spring 容器中不存在指定类型的 Bean 时,当前配置才生效
核心意义:让用户自定义 Bean 优先,自动配置作为兜底
@ConditionalOnProperty pu rao pi t
作用:配置文件中存在指定的属性 / 值时,才生效
例子:@ConditionalOnProperty(prefix = "spring.redis", havingValue = "true") → 只有配置了 Redis 相关属性,才加载 Redis 自动配置
补充 2 个高频:
@ConditionalOnWebApplication:只有 Web 项目才生效
@ConditionalOnMissingClass:类路径不存在指定类才生效

posted @ 2026-04-21 15:53  小码农的后端学习手记  阅读(62)  评论(0)    收藏  举报