非洲做网站用哪里服务器好,wordpress网页缓存插件,泉州建设局网站,北京市建设网站首页#x1f91f;致敬读者
#x1f7e9;感谢阅读#x1f7e6;笑口常开#x1f7ea;生日快乐⬛早点睡觉
#x1f4d8;博主相关
#x1f7e7;博主信息#x1f7e8;博客首页#x1f7eb;专栏推荐#x1f7e5;活动信息 文章目录 Spring Boot 常用注解面试题深度解析一、核心…致敬读者
感谢阅读笑口常开生日快乐⬛早点睡觉
博主相关
博主信息博客首页专栏推荐活动信息 文章目录 Spring Boot 常用注解面试题深度解析一、核心启动注解必考二、Bean 管理与依赖注入三、Spring MVC 注解四、配置与属性绑定五、高级特性注解六、事务与测试七、生产实践与高频问题高频面试题汇总 总结Spring Boot 注解学习路径 文章前言
文章均为学习工作中整理的笔记。如有错误请指正共同学习进步。 Spring Boot 常用注解面试题深度解析 以下精选 25 高频注解面试题涵盖核心原理、实战技巧及源码级分析助你轻松应对面试挑战。 一、核心启动注解必考 SpringBootApplication 的作用是什么包含哪些关键注解 答 核心作用开启自动配置 组件扫描 配置类声明元注解组成SpringBootConfiguration // 声明为配置类
EnableAutoConfiguration // 启用自动配置
ComponentScan // 包扫描默认当前包及其子包EnableAutoConfiguration 如何实现自动装配 答 加载 META-INF/spring.factories 中的配置类通过 Conditional 系列注解按条件装配 Bean核心流程graph LR
A[启动类] -- B[SpringBootApplication]
B -- C[EnableAutoConfiguration]
C -- D[AutoConfigurationImportSelector]
D -- E[加载spring.factories]
E -- F[过滤Conditional条件]
F -- G[注册Bean定义]二、Bean 管理与依赖注入 Component 与 Bean 的区别 对比表 特性ComponentBean作用目标类声明方法声明控制权Spring 自动实例化开发者手动创建对象适用场景自定义类第三方库组件依赖注入支持 Autowired需在配置类中使用 Autowired 和 Resource 的区别 答 Autowired 按类型注入 → byType支持 Qualifier 指定名称是 Spring 原生注解 Resource 默认按名称注入 → byName失败时回退到 byTypeJDK 原生注解javax.annotation // 示例
Autowired Qualifier(mysqlService)
private DataService service1;Resource(name oracleService)
private DataService service2;三、Spring MVC 注解 RestController 和 Controller 的区别 答 Controller 需要配合 ResponseBody 返回 JSON通常返回视图名称 RestController Controller ResponseBody 所有方法自动 JSON 序列化 // 传统写法
Controller
public class OldController {ResponseBodypublic User getUser() { /* ... */ }
}// 现代写法
RestController
public class NewController {GetMapping(/user)public User getUser() { /* ... */ } // 自动转JSON
}PathVariable 与 RequestParam 的应用场景 对比 注解位置示例 URL获取方式PathVariableURL 路径/users/{id}id 123RequestParam查询字符串/search?keywordSpringkeyword Spring 四、配置与属性绑定 Value 与 ConfigurationProperties 如何选择 答 Value 适合单个属性注入支持 SpEL 表达式 Value(${server.port})
private int port;ConfigurationProperties 批量绑定属性到对象支持类型安全校验 ConfigurationProperties(prefix datasource)
public class DataSourceConfig {private String url;private String username;// getters/setters
}PropertySource 加载自定义配置的注意事项 答 默认不支持 YAML 文件需配合 YamlPropertySourceFactory多文件加载顺序决定属性覆盖关系 Configuration
PropertySource(value classpath:custom.properties, encoding UTF-8)
public class AppConfig { /* ... */ }五、高级特性注解 Conditional 系列注解的工作原理重点 核心条件注解 注解激活条件ConditionalOnClass类路径存在指定类ConditionalOnBeanSpring 容器存在指定 BeanConditionalOnProperty配置属性匹配条件ConditionalOnWebApplication当前是 Web 应用源码解析 // 自定义条件
public class EnvCondition implements Condition {Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {String env context.getEnvironment().getProperty(app.env);return prod.equals(env);}
}// 使用示例
Bean
Conditional(EnvCondition.class)
public Service prodService() { /* ... */ }Async 实现异步调用的线程池配置 最佳实践 Configuration
EnableAsync
public class AsyncConfig {Bean(name taskExecutor)public Executor taskExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.setThreadNamePrefix(Async-);return executor;}
}// 使用
Service
public class EmailService {Async(taskExecutor) // 指定线程池public void sendEmail() { /* ... */ }
}六、事务与测试 Transactional 在类和方法上的优先级 规则 方法注解 类注解接口注解无效需基于类代理 Service
Transactional // 类级别默认事务
public class UserService {public void updateProfile() { /* 使用类事务 */ }Transactional(propagation Propagation.REQUIRES_NEW)public void auditLog() { /* 独立事务 */ }
}SpringBootTest 和 WebMvcTest 的区别 对比 测试注解测试范围启动容器适用场景SpringBootTest完整集成测试是服务层/DAO层测试WebMvcTest仅Web MVC层否控制器单元测试DataJpaTest仅JPA组件否仓库层测试// 控制器测试示例
WebMvcTest(UserController.class)
public class UserControllerTest {Autowired MockMvc mvc;MockBean UserService userService;Testvoid getUserTest() throws Exception {mvc.perform(get(/users/1)).andExpect(status().isOk());}
}七、生产实践与高频问题 如何自定义 Starter 关键步骤 创建 xxx-spring-boot-autoconfigure 模块编写自动配置类Configuration
ConditionalOnClass(MyService.class)
EnableConfigurationProperties(MyProperties.class)
public class MyAutoConfiguration {BeanConditionalOnMissingBeanpublic MyService myService(MyProperties props) {return new MyService(props);}
}在 META-INF/spring.factories 注册org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.example.MyAutoConfigurationControllerAdvice 的三种用法 答 ControllerAdvice
public class GlobalHandler {// 1. 异常处理ExceptionHandler(NotFoundException.class)public ResponseEntityError handleNotFound(NotFoundException ex) {return ResponseEntity.status(404).body(new Error(ex.getMessage()));}// 2. 数据绑定预处理InitBinderpublic void initBinder(WebDataBinder binder) {binder.registerCustomEditor(Date.class, new CustomDateEditor(...));}// 3. 模型数据增强ModelAttributepublic void addCommonModel(Model model) {model.addAttribute(appName, MyApp);}
}高频面试题汇总
SpringBootApplication 的三个核心注解分别起什么作用Autowired 注入失败有哪些可能原因 答未扫描包、多个实现类未限定、Bean未创建、静态字段注入等 如何让 Scheduled 定时任务在集群中只执行一次 答配合 ConditionalOnProperty 或分布式锁如 Redis Lock Transactional 失效的常见场景 答自调用、非 public 方法、异常类型错误、数据库引擎不支持 RequestParam vs RequestBody 的区别 答前者处理 URL 参数后者处理 JSON/XML 请求体 总结Spring Boot 注解学习路径
基础层 启动注解SpringBootApplicationBean 管理Component, Bean, Autowired Web 层 REST 控制RestController, GetMapping参数处理PathVariable, RequestBody 数据层 数据访问Repository, Transactional配置绑定ConfigurationProperties 高级特性 条件装配Conditional 系列异步处理Async, EnableAsync 测试与生产 测试切片WebMvcTest, DataJpaTest全局处理ControllerAdvice, RestControllerAdvice
掌握这些注解的原理和应用场景不仅能轻松应对面试更能构建健壮高效的 Spring Boot 应用。 文末寄语
关注我获取更多内容。技术动态、实战教程、问题解决方案等内容持续更新中。《全栈知识库》技术交流和分享社区集结全栈各领域开发者期待你的加入。加入开发者的《专属社群》分享交流技术之路不再孤独一起变强。点击下方名片获取更多内容