2026/4/11 0:21:40
网站建设
项目流程
横沥镇做网站,wordpress换域名后网站地址怎么办,哪有培训网站开发,湖南营销型网站建设 搜搜磐石网络视频看了几百小时还迷糊#xff1f;关注我#xff0c;几分钟让你秒懂#xff01;在使用 Spring Boot 开发项目时#xff0c;注解#xff08;Annotation#xff09;是必不可少的“魔法咒语”。它们让代码更简洁、配置更灵活、开发效率更高。但对刚入门的小白来说#xff…视频看了几百小时还迷糊关注我几分钟让你秒懂在使用Spring Boot开发项目时注解Annotation是必不可少的“魔法咒语”。它们让代码更简洁、配置更灵活、开发效率更高。但对刚入门的小白来说面对一堆xxx容易眼花缭乱。本文将系统梳理Spring Boot 中最常用、最核心的注解结合真实需求场景 正反例 注意事项手把手带你搞懂每个注解的用法和原理一、为什么需要注解 需求场景你正在开发一个用户管理系统需要定义一个服务类处理业务逻辑需要一个 Controller 接收 HTTP 请求需要从配置文件读取数据库连接信息需要自动注入依赖而不是手动 new 对象传统做法写大量 XML 配置文件繁琐又易错。Spring Boot 做法加几个注解自动搞定✅ 注解的核心价值声明式编程—— 告诉框架“我要什么”而不是“怎么做”。二、核心注解大合集附代码案例1.SpringBootApplication—— 项目的“总开关”SpringBootApplication public class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } }✅ 作用是以下三个注解的组合SpringBootConfiguration标记为配置类EnableAutoConfiguration自动配置如检测到 Web 依赖自动配 TomcatComponentScan扫描当前包及其子包下的组件如Service,Controller❌ 反例// 错误把启动类放在 com.example 包下 // 但 Service 在 com.service 包 → 扫描不到 com.example.UserApplication // 启动类 com.service.UserService // 扫描不到⚠️ 注意事项启动类必须放在根包如com.example确保能扫描到所有子包。不要手动添加EnableAutoConfiguration它已包含在SpringBootApplication中。2.Service/Repository/Component—— 组件注册三剑客Service public class UserService { public String getUserInfo(Long id) { return User- id; } } Repository public class UserDao { public void save() { System.out.println(保存用户到数据库); } }✅ 作用Service业务逻辑层Repository数据访问层还能自动转换数据库异常Component通用组件当不属于以上两类时使用❌ 反例字段注入Service public class OrderService { Autowired // 字段注入不推荐 private UserService userService; }✅ 正确做法构造器注入Service public class OrderService { private final UserService userService; public OrderService(UserService userService) { this.userService userService; } }⚠️ 注意事项优先使用构造器注入不可变、线程安全、便于单元测试。字段注入会破坏封装性且无法被final修饰。3.RestController—— 构建 REST API 的利器RestController RequestMapping(/api/user) public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService userService; } GetMapping(/{id}) public String getUser(PathVariable Long id) { return userService.getUserInfo(id); } }✅ 作用等价于Controller ResponseBody方法返回值自动转为 JSON需 Jackson 依赖❌ 反例忘记加PathVariableGetMapping(/{id}) public String getUser(Long id) { // 编译不报错但 id 永远为 null return userService.getUserInfo(id); }✅ 正确写法GetMapping(/{id}) public String getUser(PathVariable Long id) { // 必须加注解 return userService.getUserInfo(id); }4.ValuevsConfigurationProperties—— 读取配置的两种方式方式一Value适合少量配置Component public class AppConfig { Value(${app.name}) private String appName; Value(${app.timeout:30}) // 设置默认值 30 private int timeout; }方式二ConfigurationProperties适合复杂配置# application.yml db: url: jdbc:mysql://localhost:3306/test username: root password: 123456Component ConfigurationProperties(prefix db) public class DbConfig { private String url; private String username; private String password; // 必须提供 getter/setter }⚠️ 注意事项使用ConfigurationProperties时必须开启EnableConfigurationProperties或加Component推荐使用ConstructorBindingfinal字段实现不可变配置Spring Boot 2.25.Transactional—— 声明式事务管理Service public class OrderService { Transactional(rollbackFor Exception.class) public void createOrder(Order order) { orderDao.save(order); inventoryService.deductStock(order); // 如果这里抛异常订单也会回滚 } }⚠️ 注意事项极易踩坑只能用于 public 方法同类方法调用无效A 调 BB 有Transactional但 A 没有 → 事务不生效默认只对RuntimeException回滚需显式指定rollbackFor Exception.class6.Profile—— 多环境配置Configuration Profile(dev) public class DevDatabaseConfig { // 开发环境数据库配置 } Configuration Profile(prod) public class ProdDatabaseConfig { // 生产环境配置 }启动时指定环境java -jar app.jar --spring.profiles.activeprod三、常见误区总结误区正确做法到处用Autowired字段注入改用构造器注入把启动类放错包导致 Bean 扫描不到启动类放根包Transactional用在 private 方法必须是 publicValue读不到配置检查属性名是否匹配是否加了${}忘记给ConfigurationProperties类加 getter/setterLombok 的Data可解决四、结语Spring Boot 的注解体系看似庞杂但只要理解其设计思想自动配置、依赖注入、声明式编程就能举一反三。记住注解不是魔法而是约定优于配置的体现。掌握这些核心注解你已经超越了 80% 的初学者视频看了几百小时还迷糊关注我几分钟让你秒懂