Spring Boot 后端开发核心注解全级指南(从入门到入土)

Carlos 发布于 2026-03-23 92 次阅读


前言

在 Java 后端开发中,尤其是 Spring Boot 生态里,“注解(Annotation)”就是一等公民。它可以大幅减少 XML 配置和样板代码。但是很多初学者(甚至写了几个月代码的新手)面对满屏的 @XXX 依然会感到懵圈。

本文将按照后端开发的**“分层架构(Entity -> Dao -> Service -> Controller)”以及“常用配置”**,为你彻底梳理 Spring Boot 和数据库操作中最核心的注解。看完这篇,再也不用担心看不懂大佬的代码了!


一、 启动与配置基石

万物起源于启动类,这里的注解决定了 Spring Boot 如何跑起来。

1. @SpringBootApplication

位置:项目的主启动类上。

作用:Spring Boot 项目的核心注解。它实际上是三个注解的终极合体:

  • @SpringBootConfiguration:允许在上下文中注册额外的 bean 或导入其他配置类。
  • @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制。
  • @ComponentScan:扫描当前包及其子包下的所有组件(带有 @Component@Service 等注解的类)。

2. @Configuration@Bean

位置@Configuration 放在类上,@Bean 放在方法上。

作用:替代传统的 XML 配置。@Configuration 告诉 Spring 这是一个配置类,而 @Bean 告诉 Spring:“请运行这个方法,并将返回的对象交给 Spring 容器管理。”

Java

@Configuration
public class AppConfig {
    @Bean(name = "myUser")
    public User user() {
        return new User("张三", 18);
    }
}

二、 实体层与数据库映射 (Entity & JPA)

这部分主要用于 JPA(Java Persistence API),负责把 Java 对象(POJO)和数据库的表关联起来。

1. @Entity@Table

  • @Entity:标注在类上,告诉 JPA 这个类对应数据库里的一张表。
  • @Table:可选。如果表名和类名不一致,可以通过它指定表名,如 @Table(name = "t_user")

2. @Id@GeneratedValue

  • @Id:标明这个属性是表的主键。
  • @GeneratedValue:指定主键的生成策略。最常用的是 GenerationType.IDENTITY(依赖数据库的自增,如 MySQL)。

3. @Column

作用:设置字段的属性(列名、长度、是否为空等)。如果不写,默认列名就是属性名。

Java

@Entity
@Table(name = "t_man")
public class Man {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
 
    @Column(name = "username", length = 50)
    private String name;
}

三、 持久层 (Dao / Mapper)

这部分负责与数据库进行直接交互。这里分为 JPA 流派和 MyBatis 流派。

1. JPA 流派:@Repository

作用:标注在持久层接口上。通常这个接口会继承 JpaRepository。Spring 会自动为其生成实现类。

Java

@Repository
public interface ManDao extends JpaRepository<Man, Long> {
    // 继承后直接拥有基本的 CRUD 方法
    Man findByName(String name);
}

2. MyBatis 流派:@Mapper 与 CRUD 注解

  • @Mapper:标识这是一个 MyBatis 的 Mapper 接口。
  • @Select, @Insert, @Update, @Delete:直接在方法上写对应的 SQL 语句,省去了写 XML 文件的麻烦(适合简单 SQL)。

Java

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(int id);
}

四、 业务逻辑层 (Service)

1. @Service

作用:标识这是一个业务逻辑层的类。被标注的类会被 Spring 容器接管。

2. @Autowired@Resource

作用:依赖注入。把 Spring 容器里已经创建好的对象(比如 Dao 层实例)“塞”到当前类里。

  • @Autowired 是 Spring 提供的,默认按类型注入。
  • @Resource 是 JDK 提供的,默认按名称注入。

Java

@Service
public class MyService {
    @Autowired  // 自动把 manDao 注入进来
    private ManDao manDao;
    
    public String getManInfo(){                    
        return manDao.findById(1).toString();
    }
}

五、 控制层与参数接收 (Controller)

这是前后端交互的桥梁,负责接收 HTTP 请求并返回数据。

1. @RestController

作用:现在前后端分离项目最常用的注解。它是 @Controller@ResponseBody 的结合体。

  • 加了它,类里的所有方法返回的都是数据(通常是 JSON 格式),而不是试图跳转到某个 HTML 页面。

2. 路由映射注解

  • @RequestMapping:通用的请求映射,可以指定 Method(GET、POST 等)。
  • 快捷注解
    • @GetMapping:等价于 @RequestMapping(method = RequestMethod.GET),用于查询。
    • @PostMapping:用于新增。
    • @PutMapping:用于更新。
    • @DeleteMapping:用于删除。

3. 神奇的参数接收注解

这是新手最容易搞混的地方,请牢记:

  • @RequestParam:获取 URL 查询参数(问号后面的参数)。
    • URL: http://localhost/user?id=10
    • 代码: public String getUser(@RequestParam int id)
  • @PathVariable:获取 路径参数(URL 本身的一部分)。
    • URL: http://localhost/user/10
    • 代码: @GetMapping("/user/{id}") public String getUser(@PathVariable int id)
  • @RequestBody:获取 请求体(Body)中的 JSON 数据。前端发 POST 请求传对象时必用!
    • 代码: public String login(@RequestBody User user)

六、 其他高频组件注解

1. @Component

作用:泛指各种组件。如果一个类不好归类为 @Service@Controller@Repository,但又想让 Spring 管理它(比如一个工具类、拦截器),就用这个。

2. @Value

作用:从配置文件(application.ymlproperties)中读取特定的值。

Java

@Value("${server.port}")
private String port;

3. @CrossOrigin

作用:解决前后端分离开发时头疼的跨域问题。直接加在 Controller 类上,允许前端跨域访问。

4. @Aspect

作用:面向切面编程(AOP)。用来定义一个切面,常用于统一处理日志打印、权限校验等,实现代码解耦。


总结打油诗:

启动先找 @SpringBoot

数据库建表 @Entity 凑。

业务处理 @Service 做,

接口返回 @RestController 收。

参数是问号 @RequestParam

路径带值 @PathVariable 抠。

实体 JSON @RequestBody

跨域阻拦 @CrossOrigin 救!

✨职务:华夏大地区域代理人 | 熬夜秃头项目主理人 💳黑卡:校园一卡通全球辅导版持有者 📍地点:宇宙-银河系-地球-东北蹲分部 🥂生活方式:沉迷于廉价多巴胺 | 致力于在该醒的时候睡觉 🚫拒绝:拒绝早起 | 拒绝内卷| 拒绝借钱 简介:虽然我没钱,但我有时间;虽然我没才华,但我有脾气。
最后更新于 2026-03-23