目录

一、组件声明类注解(告诉 Spring:这是个 Bean)

1. @Component

2. @Service

3. @Repository

4. @Controller / @RestController

二、依赖注入相关注解(对象怎么进来)

1. @Autowired

2. @Qualifier

3. @Resource

三、配置相关注解(容器怎么启动)

1. @Configuration

2. Bean

3. @ComponentScan

四、Web 请求相关注解(Spring MVC)

1. @RequestMapping

2. @GetMapping / @PostMapping 等

3. @PathVariable

4. @RequestParam

5. @RequestBody

五、事务与切面相关注解

1. @Transactional

2. @Aspect

3. @Before / @After / @Around

六、生命周期与扩展相关注解

1. @PostConstruct

2. @PreDestroy

七、校验与条件注解

1. @Valid / @Validated

2. @Conditional

八、总结


在 Spring 开发中,我们几乎每天都在和注解打交道。
@Component、@Autowired、@RequestMapping、@Transactional……
如果只是“见过、会用”,很容易越学越杂。

实际上,Spring 中的注解是高度体系化的。
只要按“它解决什么问题”来分类,逻辑会非常清晰。

一、组件声明类注解(告诉 Spring:这是个 Bean)

这类注解的核心作用只有一个:把类交给 Spring 容器管理

1. @Component

最基础的组件注解。

@Component

public class UserService {

}

表示这是一个普通的 Spring Bean。

2. @Service

@Service
public class UserService {
}
  • 本质是 @Component
  • 语义上表示业务层组件

推荐:业务类使用 @Service,提高可读性

3. @Repository

@Repository
public class UserDao {
}
  • 本质是 @Component
  • 用于持久层
  • 具备异常转换能力

DAO 层推荐使用

4. @Controller / @RestController

@Controller
public class UserController {
}
@RestController
public class UserController {
}
  • @RestController = @Controller + @ResponseBody
  • 用于 Web 层

前后端分离项目中几乎必用 @RestController

二、依赖注入相关注解(对象怎么进来)

这类注解解决的是:Bean 和 Bean 之间如何建立关系

1. @Autowired

@Autowired
private UserService userService;
  • 按类型注入(byType)
  • Spring 提供

最常用的依赖注入方式

2. @Qualifier

@Autowired
@Qualifier("userServiceImpl")
private UserService userService;
  • 解决多个实现类冲突
  • 按名称精确指定

3. @Resource

@Resource
private UserService userService;
  • JSR 标准注解
  • 默认按名称注入

Spring 项目中更推荐 @Autowired

三、配置相关注解(容器怎么启动)

1. @Configuration

@Configuration
public class AppConfig {
}
  • 声明配置类
  • 等价于 XML 配置文件

2. Bean

@Bean
public UserService userService() {
    return new UserService();
}
  • 方法级别
  • 用于将第三方对象交给 Spring 管理

非常重要的注解

3. @ComponentScan

@ComponentScan("com.example")
  • 指定组件扫描路径
  • 决定哪些类会被加载成 Bean

四、Web 请求相关注解(Spring MVC)

1. @RequestMapping

@RequestMapping("/users")
  • 通用请求映射
  • 支持 GET / POST / PUT / DELETE

2. @GetMapping / @PostMapping 等

@GetMapping("/users")
  • @RequestMapping 的语义化简写
  • 更推荐使用

3. @PathVariable

@GetMapping("/users/{id}")
public User get(@PathVariable Long id) {
}
  • 接收路径参数

4. @RequestParam

@GetMapping("/users")
public List<User> list(@RequestParam String name) {
}
  • 接收请求参数

5. @RequestBody

@PostMapping("/users")
public void save(@RequestBody User user) {
}
  • 接收请求体(JSON)
  • 前后端分离必用

五、事务与切面相关注解

1. @Transactional

@Transactional
public void save() {
}
  • 声明式事务
  • 基于 AOP 实现

Spring AOP 最典型的应用场景

2. @Aspect

@Aspect
@Component
public class LogAspect {
}
  • 声明切面类

3. @Before / @After / @Around

@Before("execution(* com.example.*.*(..))")
  • 定义通知类型
  • 控制增强时机

六、生命周期与扩展相关注解

1. @PostConstruct

@PostConstruct
public void init() {
}
  • Bean 初始化后执行
  • JSR 标准注解

2. @PreDestroy

@PreDestroy
public void destroy() {
}
  • Bean 销毁前执行

七、校验与条件注解

1. @Valid / @Validated

public void save(@Valid User user) {
}
  • 参数校验
  • 常用于 Controller 层

2. @Conditional

@Conditional(MyCondition.class)
  • 条件装配
  • Spring Boot 自动配置的基础

八、总结

Spring 中的注解,本质上都是在告诉容器:哪些类要管、什么时候管、怎么管。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐