卡码笔记
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
  • 基础与面向对象

  • 集合

  • 异常

  • 字符串

  • JVM

  • 并发与多线程

  • JDK

  • Spring

    • Spring,SpringBoot,SpringMVC和SpringCloud区别?
    • 怎么理解SpringBoot?
    • SpringBootStarter是什么?
    • SpringBoot的启动流程是什么?
    • SpringBoot的常用注解有哪些?
      • 简要回答
      • 详细回答
      • 知识图解
      • 知识扩展
    • SpringMVC的执行流程是什么?
    • Spring的常见注解有哪些?
    • Spring中的设计模式有哪些?
    • Spring的循环依赖问题怎么解决?
    • 说说你对SpringIOC的理解?
    • 对SpringAOP的理解?
    • Bean的作用域?
    • Bean的生命周期?
  • 设计模式

# SpringBoot常用注解

# 简要回答

  • SpringBoot的注解以Spring的注解为基础,做了轻量化、自动化和场景化的改进,在Spring注解的基础上做了封装与扩展,实现约定大于配置,减少开发者的配置工作。
  • 自动配置核心注解 @SpringBootApplication ,整合了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。
  • 配置读取可使用 @ConfigurationProperties 绑定配置文件属性, @Value 读取单个配置值。
  • Web开发在Spring注解基础上扩展了 @GetMapping/@PostMapping 等,新增@RestControllerAdvice处理全局异常。
  • 条件装配可通过@ConditionalOnClass、@ConditionalOnMissingBean等控制Bean的创建时机。
  • 启动相关有 @SpringBootApplication 标记启动类, @MapperScan 扫描MyBatis映射接口。

# 详细回答

  • @SpringBootApplication:SpringBoot是应用的核心启动注解,是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 三个注解的组合:
    • @SpringBootConfiguration:本质是 @Configuration,标记当前类为配置类;
    • @EnableAutoConfiguration:开启自动配置,SpringBoot 会根据类路径下的依赖自动配置 Bean(如引入 spring-boot-starter-web 则自动配置 Tomcat、DispatcherServlet);
    • @ComponentScan:默认扫描当前类所在包及子包下的 @Component、@Service 等注解组件。
  • @ConfigurationProperties:能够批量绑定配置文件中的属性到Bean中,支持前缀指定,例如@ConfigurationProperties(prefix = "app.datasource")可绑定app.datasource.url等配置到类的成员变量。
  • @Value:可以从属性文件或配置中读取单个配置值并注入到成员变量,例如@Value("${server.port:8080}")读取端口配置,默认值 8080。
  • @RestControllerAdvice:负责全局异常处理、数据绑定、响应增强的注解,结合 @ExceptionHandler 可统一处理 Controller 层异常,替代传统的 @ControllerAdvice+@ResponseBody 组合。
  • @ExceptionHandler:在 @RestControllerAdvice 标注的类中使用,指定处理特定类型的异常,例如使用@ExceptionHandler(NullPointerException.class)处理空指针异常。
  • @ConditionalOnClass:条件装配注解,当类路径下存在指定类时,才加载当前配置类Bean;反之 @ConditionalOnMissingClass 则是不存在指定类时生效。
  • @ConditionalOnBean:当Spring容器中存在指定Bean时,才创建当前Bean;@ConditionalOnMissingBean 则是容器中不存在指定Bean时生效,常用于自定义Bean覆盖默认配置。
  • @MapperScan:指定MyBatis映射接口的扫描包路径,替代在每个Mapper接口上标注@Mapper,例如@MapperScan("com.example.mapper"),让容器识别接口并创建代理实现类。
  • @EnableTransactionManagement:开启Spring的事务管理功能,结合 @Transactional 注解实现声明式事务(SpringBoot 中引入 spring-boot-starter-jdbc/orm后会自动开启,无需手动标注)。
  • @Async:能够标记方法为异步执行,需配合@EnableAsync 注解开启异步功能,Spring会为异步方法创建独立线程执行。
  • @EnableCaching:开启缓存功能,结合@Cacheable、@CachePut、@CacheEvict等注解实现数据缓存。
  • @PathVariable:从URL路径中提取参数,例如@GetMapping("/user/{id}")中通过@PathVariable("id") Long id获取路径中的 id 值。
  • @RequestParam:获取请求参数(URL 拼接或表单提交的参数),支持指定参数名、是否必传、默认值,例如@RequestParam(value = "name", required = false, defaultValue = "guest") String name。

# 知识图解

  1. Spring框架与Spring Boot的关系 image
  2. SpringBoot常见注解 image

# 知识扩展

  1. 面试官可能追问:
  • @SpringBootApplication的扫描范围是什么?可以修改吗?
    • @SpringBootApplication注解默认扫描当前包及其所有子包下的组件。
    • 可以通过@ComponentScan注解或者使用@SpringBootApplication的scanBasePackages属性指定扫描包。@ComponentScan的excludeFilters属性可以排除特定组件。
  • SpringBoot的@Transactional注解什么时候会失效?
    • 如果事务方法被private/static/final修饰,无法被AOP代理时,事务方法将不会被事务管理。
    • 同类中非事务方法调用事务方法,注解无效。
    • 如果异常被catch捕获但没有抛出或者异常类型不是运行时异常时,事务方法将失效。
  • @Async注解的方法为什么不能是private或者static?
    • @Async注解基于Spring AOP实现,而AOP无法代理private/static方法。
  • @RestControllerAdvice和@ControllerAdvice的区别是什么?
    • @RestControllerAdvice是@ControllerAdvice和@ResponseBody的组合,内部的@ExceptionHandler方法返回的数据会以json格式返回给前端。而@ControllerAdvice返回的是视图页面,手动添加@ResponseBody注解后才能返回json数据。
  • 怎么通过@RestControllerAdvice实现全局异常处理?
    • 先定义异常枚举的错误码和错误信息,然后编写统一返回结果类(code/msg/data),在@RestControllerAdvice类中使用@ExceptionHandler标注方法,捕获不同类型异常,封装为统一的返回结果返回。
Last Updated: 3/10/2026, 6:08:48 PM

← SpringBoot的启动流程是什么? SpringMVC的执行流程是什么? →

评论

验证登录状态...

侧边栏
夜间
卡码简历
代码随想录
卡码投递表🔥
2026群
添加客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记
鼓励/支持/赞赏Carl
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪