Skip to content

SpringBoot2核心功能面试题库 ​

生成时间:2026-05-24 21:25


本轮 SpringBoot2核心功能面试题库(带答案) ​

【面试题】1. @SpringBootApplication注解的组合原理是什么?为什么它能替代传统的配置类? ​

【标准答案】@SpringBootApplication是一个组合注解,包含三个核心注解:

  1. @SpringBootConfiguration:本质上就是@Configuration,标记为配置类
  2. @EnableAutoConfiguration:开启自动配置的核心,通过@Import导入AutoConfigurationImportSelector
  3. @ComponentScan:默认扫描当前包及子包下的所有组件

传统方式需要写三个注解,现在一个搞定。关键点:它默认扫描启动类所在包,所以启动类要放在根包下。如果想自定义扫描范围,可以用scanBasePackages属性。

【面试题】2. SpringBoot的配置文件加载顺序是怎样的?哪些配置优先级最高? ​

【标准答案】加载顺序从高到低:

  1. 命令行参数(最高优先级)
  2. Java系统属性(System.getProperties())
  3. 操作系统环境变量
  4. jar包外部的application-{profile}.properties/yml
  5. jar包内部的application-{profile}.properties/yml
  6. jar包外部的application.properties/yml
  7. jar包内部的application.properties/yml
  8. @PropertySource注解加载的配置(最低优先级)

实战经验:生产环境用命令行参数覆盖配置,如--server.port=8080;多环境用Profile,application-prod.yml比application.yml优先级高。

【面试题】3. BeanPostProcessor和BeanFactoryPostProcessor有什么区别?分别在什么时机执行? ​

【标准答案】两者执行时机和作用完全不同:

  • BeanFactoryPostProcessor:在BeanDefinition加载完成后、Bean实例化前执行,用于修改BeanDefinition的属性,比如PropertySourcesPlaceholderConfigurer解析占位符
  • BeanPostProcessor:在Bean实例化后、初始化前后执行,用于对Bean实例进行增强处理

执行顺序:BeanFactoryPostProcessor → Bean实例化 → BeanPostProcessor(初始化前afterPropertiesSet前 → 初始化后)

经典案例:@Autowired由AutowiredAnnotationBeanPostProcessor处理,@ConfigurationProperties由ConfigurationPropertiesBindingPostProcessor处理。

【面试题】4. @Import注解有哪三种导入方式?分别适用什么场景? ​

【标准答案】三种方式:

  1. 直接导入配置类:@Import(DataSourceConfig.class),适合导入确定的配置类
  2. 导入ImportSelector实现类:@Import(MyImportSelector.class),在selectImports方法中返回要导入的类全限定名数组,适合动态选择
  3. 导入ImportBeanDefinitionRegistrar实现类:@Import(MyRegistrar.class),可以直接注册BeanDefinition,适合需要精细控制Bean注册的场景

源码中@EnableAutoConfiguration用的就是第二种,通过AutoConfigurationImportSelector读取spring.factories动态导入。

【面试题】5. Spring AOP什么时候用JDK动态代理,什么时候用CGLIB? ​

【标准答案】判断规则:

  • 目标类实现了接口:默认用JDK动态代理
  • 目标类没有实现接口:必须用CGLIB
  • 强制使用CGLIB:spring.aop.proxy-target-class=true或@EnableAspectJAutoProxy(proxyTargetClass=true)

SpringBoot 2.x后默认proxyTargetClass=true,即优先用CGLIB。

实战建议:如果项目中接口定义规范,用JDK代理语义清晰;如果用@service注解直接代理实现类,CGLIB更合适。注意CGLIB不能代理final方法。

【面试题】6. Spring事件机制的执行流程是怎样的?如何实现异步事件? ​

【标准答案】核心流程:

  1. 定义事件类继承ApplicationEvent
  2. 监听器实现ApplicationListener或使用@EventListener
  3. 发布者调用ApplicationContext.publishEvent()发布事件
  4. Spring同步调用所有匹配的监听器

异步事件两种方式:

  1. 监听方法上加@Async,配合@EnableAsync启用异步 2.配置SimpleApplicationEventMulticaster的taskExecutor属性

注意事项:异步事件中异常不会传播到发布者,需要单独处理;事件监听器默认同步执行,性能敏感场景用异步。

【面试题】7. 拦截器(Interceptor)和过滤器(Filter)的区别是什么?执行顺序怎样? ​

【标准答案】区别从三个维度看:

  1. 所属层级:Filter属于Servlet容器,Interceptor属于Spring容器
  2. 拦截范围:Filter拦截所有请求包括静态资源,Interceptor只拦截Controller方法
  3. 功能能力:Interceptor可以注入Spring Bean,可以获取Handler方法信息

执行顺序:请求 → Filter → DispatcherServlet → Interceptor(preHandle) → Controller → Interceptor(postHandle) → 视图渲染 → Interceptor(afterCompletion) → Filter → 响应

实战场景:跨域处理、登录校验用Interceptor;请求日志、编码转换用Filter。

【面试题】8. @Transactional的传播行为有哪些?REQUIRED和REQUIRES_NEW有什么区别? ​

【标准答案】7种传播行为,常用4种:

  1. REQUIRED(默认):有事务就加入,没有就新建
  2. REQUIRES_NEW:总是新建事务,挂起当前事务
  3. NESTED:有事务就创建嵌套事务,没有就新建
  4. SUPPORTS:有事务就加入,没有就以非事务方式执行

REQUIRED vs REQUIRES_NEW:

  • REQUIRED:方法B加入方法A的事务,A或B任一异常,整体回滚
  • REQUIRES_NEW:方法B新建独立事务,B的异常不影响A(除非A捕获B的异常)

经典场景:日志记录即使业务失败也要入库,用REQUIRES_NEW。

【面试题】9. @Cacheable缓存注解的工作原理是什么?如何保证缓存一致性? ​

【标准答案】工作原理:

  1. AOP拦截标注@Cacheable的方法
  2. 执行前先查缓存,key由KeyGenerator生成(默认参数组合)
  3. 缓存命中直接返回,未命中执行方法并将结果写入缓存
  4. @CachePut每次执行方法并更新缓存
  5. @CacheEvict删除缓存

缓存一致性策略:

  • 失效模式:更新数据库后立即@CacheEvict删除缓存
  • 双写模式:更新数据库后@CachePut同步更新缓存
  • 分布式锁:高并发场景用Redis分布式锁防止缓存穿透

生产经验:缓存key设计要包含业务标识,避免key冲突;设置合理的TTL防止脏数据。

【面试题】10. SpringBoot Actuator的核心端点有哪些?如何保障端点安全? ​

【标准答案】核心端点:

  • /health:应用健康状态,显示数据库、Redis等组件状态
  • /info:应用信息,可自定义git、build信息
  • /metrics:性能指标,包括JVM内存、HTTP请求统计
  • /env:环境变量和配置属性
  • /beans:Spring Bean列表
  • /mappings:URL映射信息

安全策略:

  1. management.endpoints.web.exposure.include=health,info 只暴露必要端点
  2. management.endpoint.health.show-details=when_authorized 敏感信息需授权
  3. 引入Spring Security,配置/actuator/**需要认证
  4. 生产环境用management.server.port修改端口,隔离内网访问

监控集成:/actuator/prometheus端点对接Prometheus,Grafana做可视化监控面板。


本文档包含10道SpringBoot2核心功能面试题,涵盖自动配置、配置管理、Bean生命周期、AOP、事件机制、Web开发、事务管理、缓存、监控等核心考点。