Spring 的注解可以理解为:给类、方法、属性贴“标签”,告诉 Spring 框架这个东西应该怎么被管理、怎么被调用、怎么注入

比如:

@Component
public class UserService {
}

意思是:UserService 这个类交给 Spring 管理,以后需要它的时候,Spring 可以自动创建对象


一、最核心的几个注解

1. @Component

表示这是一个 Spring 组件,会被 Spring 自动扫描并创建对象。

@Component
public class UserService {
    public void hello() {
        System.out.println("Hello Spring");
    }
}

等价于告诉 Spring:

这个类你帮我管理起来。


2. @Autowired

表示自动注入对象。

@Component
public class UserController {

    @Autowired
    private UserService userService;

    public void test() {
        userService.hello();
    }
}

意思是:

我需要一个 UserService 对象,你帮我从 Spring 容器里找一个注入进来。


3. @Controller

用于 Web 层,表示这是一个控制器,负责接收浏览器请求

@Controller
public class UserController {
}

常用于传统 Spring MVC 页面跳转。


4. @RestController

表示这是一个 REST 风格接口控制器,返回数据,而不是页面

@RestController
public class UserController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello Spring";
    }
}

浏览器访问:

http://localhost:8080/hello

会返回:

Hello Spring

@RestController 可以理解为:

@Controller + @ResponseBody

5. @Service

@Service 是 Spring 里用来标记业务逻辑层的注解。

简单说:

@Service
public class UserService {
}

意思是告诉 Spring:

这个类是一个业务类,请你帮我创建对象,并放进 Spring 容器中管理。

6. @Repository

@Repository 是 Spring 里用来标记数据访问层的注解。

简单说:

@Repository
public class UserRepository {
}

意思是告诉 Spring:

这个类是用来访问数据库的,请你帮我管理它

二、常见分层注解

Spring 项目通常分为三层:

注解 用在哪一层 作用
@Controller 控制层 接收请求
@RestController 控制层 接收请求并返回数据
@Service 业务层 写业务逻辑
@Repository 数据访问层 操作数据库
@Component 通用组件 普通 Spring 组件

例如:

@RestController
public class UserController {

    @Autowired
    private UserService userService;
}
@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;
}
@Repository
public class UserRepository {
}

它们本质上都类似于 @Component,都是把类交给 Spring 管理,只是语义更清楚


三、请求相关注解

1. @RequestMapping

用于定义接口路径。

@RequestMapping("/user")
public class UserController {
}

表示这个类下面的接口都以 /user 开头


2. @GetMapping

处理 GET 请求,通常用于查询数据。

@GetMapping("/user")
public String getUser() {
    return "查询用户";
}

访问:

GET /user

3. @PostMapping

处理 POST 请求,通常用于新增数据

@PostMapping("/user")
public String addUser() {
    return "新增用户";
}

4. @PutMapping

处理 PUT 请求,通常用于修改数据

@PutMapping("/user")
public String updateUser() {
    return "修改用户";
}

5. @DeleteMapping

处理 DELETE 请求,通常用于删除数据

@DeleteMapping("/user")
public String deleteUser() {
    return "删除用户";
}

四、获取请求参数的注解

1. @RequestParam

获取 URL 后面的参数

@GetMapping("/hello")
public String hello(@RequestParam String name) {
    return "Hello " + name;
}

访问:

/hello?name=Tom

返回:

Hello Tom

2. @PathVariable

获取路径中的参数。

@GetMapping("/user/{id}")
public String getUser(@PathVariable Integer id) {
    return "用户ID:" + id;
}

访问:

/user/100

返回:

用户ID:100

3. @RequestBody

接收 JSON 数据。

前端发送:

{
  "name": "Tom",
  "age": 18
}

后端接收:

@PostMapping("/user")
public String addUser(@RequestBody User user) {
    return user.getName();
}

实体类:

public class User {
    private String name;
    private Integer age;

    // getter 和 setter
}

五、配置相关注解

1. @SpringBootApplication

Spring Boot 项目的启动类注解

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

它是 Spring Boot 项目的入口。

可以简单理解为:

从这里启动整个 Spring Boot 程序。


2. @Configuration

表示这是一个配置类

@Configuration
public class AppConfig {
}

3. @Bean

手动创建一个对象,并交给 Spring 管理。

@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserService();
    }
}

适用于你不能直接给类加 @Component 的情况,例如第三方库里的类。


六、事务注解

@Transactional

用于数据库事务。

@Transactional
public void transfer() {
    // 扣钱
    // 加钱
}

意思是:

这个方法要么全部执行成功,要么全部回滚

比如转账:

@Transactional
public void transfer() {
    accountA.minus(100);
    accountB.add(100);
}

如果中间出错,扣钱操作也会回滚,避免钱扣了但没到账。


七、最常用注解总结

初学者先重点掌握这些:

注解 作用
@SpringBootApplication Spring Boot 启动入口
@RestController 写接口
@RequestMapping 定义公共路径
@GetMapping 查询接口
@PostMapping 新增接口
@RequestParam 获取 URL 参数
@PathVariable 获取路径参数
@RequestBody 获取 JSON 请求体
@Service 业务层
@Repository 数据访问层
@Autowired 自动注入对象
@Component 普通组件
@Bean 手动注册对象
@Transactional 开启事务

八、一个完整小例子

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public String getUser(@PathVariable Integer id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public String addUser(@RequestBody User user) {
        return "添加用户:" + user.getName();
    }
}
@Service
public class UserService {

    public String getUserById(Integer id) {
        return "用户ID:" + id;
    }
}
public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

这个例子里:

@RestController

说明 UserController 是接口控制器。

@RequestMapping("/user")

说明接口路径以 /user 开头。

@Autowired

说明自动注入 UserService

@GetMapping("/{id}")

说明处理 /user/1 这种 GET 请求。

@PathVariable Integer id

说明从路径中取出 id

@PostMapping

说明处理新增用户请求。

@RequestBody User user

说明从 JSON 请求体中接收用户信息。


总结:

Spring 注解的核心作用,就是让 Spring 自动帮你创建对象、管理对象、注入对象、处理请求。

更多推荐