目录
[一、组件声明类注解(告诉 Spring:这是个 Bean)](#一、组件声明类注解(告诉 Spring:这是个 Bean))
[1. @Component](#1. @Component)
[2. @Service](#2. @Service)
[3. @Repository](#3. @Repository)
[4. @Controller / @RestController](#4. @Controller / @RestController)
[1. @Autowired](#1. @Autowired)
[2. @Qualifier](#2. @Qualifier)
[3. @Resource](#3. @Resource)
[1. @Configuration](#1. @Configuration)
[2. Bean](#2. Bean)
[3. @ComponentScan](#3. @ComponentScan)
[四、Web 请求相关注解(Spring MVC)](#四、Web 请求相关注解(Spring MVC))
[1. @RequestMapping](#1. @RequestMapping)
[2. @GetMapping / @PostMapping 等](#2. @GetMapping / @PostMapping 等)
[3. @PathVariable](#3. @PathVariable)
[4. @RequestParam](#4. @RequestParam)
[5. @RequestBody](#5. @RequestBody)
[1. @Transactional](#1. @Transactional)
[2. @Aspect](#2. @Aspect)
[3. @Before / @After / @Around](#3. @Before / @After / @Around)
[1. @PostConstruct](#1. @PostConstruct)
[2. @PreDestroy](#2. @PreDestroy)
[1. @Valid / @Validated](#1. @Valid / @Validated)
[2. @Conditional](#2. @Conditional)
在 Spring 开发中,我们几乎每天都在和注解打交道。
@Component、@Autowired、@RequestMapping、@Transactional......
如果只是"见过、会用",很容易越学越杂。
实际上,Spring 中的注解是高度体系化的。
只要按"它解决什么问题"来分类,逻辑会非常清晰。
一、组件声明类注解(告诉 Spring:这是个 Bean)
这类注解的核心作用只有一个:把类交给 Spring 容器管理
1. @Component
最基础的组件注解。
java
@Component
public class UserService {
}
表示这是一个普通的 Spring Bean。
2. @Service
java
@Service
public class UserService {
}
- 本质是 @Component
- 语义上表示业务层组件
推荐:业务类使用 @Service,提高可读性
3. @Repository
java
@Repository
public class UserDao {
}
- 本质是 @Component
- 用于持久层
- 具备异常转换能力
DAO 层推荐使用
4. @Controller / @RestController
java
@Controller
public class UserController {
}
java
@RestController
public class UserController {
}
- @RestController = @Controller + @ResponseBody
- 用于 Web 层
前后端分离项目中几乎必用 @RestController
二、依赖注入相关注解(对象怎么进来)
这类注解解决的是:Bean 和 Bean 之间如何建立关系
1. @Autowired
java
@Autowired
private UserService userService;
- 按类型注入(byType)
- Spring 提供
最常用的依赖注入方式
2. @Qualifier
java
@Autowired
@Qualifier("userServiceImpl")
private UserService userService;
- 解决多个实现类冲突
- 按名称精确指定
3. @Resource
java
@Resource
private UserService userService;
- JSR 标准注解
- 默认按名称注入
Spring 项目中更推荐 @Autowired
三、配置相关注解(容器怎么启动)
1. @Configuration
java
@Configuration
public class AppConfig {
}
- 声明配置类
- 等价于 XML 配置文件
2. Bean
java
@Bean
public UserService userService() {
return new UserService();
}
- 方法级别
- 用于将第三方对象交给 Spring 管理
非常重要的注解
3. @ComponentScan
java
@ComponentScan("com.example")
- 指定组件扫描路径
- 决定哪些类会被加载成 Bean
四、Web 请求相关注解(Spring MVC)
1. @RequestMapping
java
@RequestMapping("/users")
- 通用请求映射
- 支持 GET / POST / PUT / DELETE
2. @GetMapping / @PostMapping 等
java
@GetMapping("/users")
- @RequestMapping 的语义化简写
- 更推荐使用
3. @PathVariable
java
@GetMapping("/users/{id}")
public User get(@PathVariable Long id) {
}
- 接收路径参数
4. @RequestParam
java
@GetMapping("/users")
public List<User> list(@RequestParam String name) {
}
- 接收请求参数
5. @RequestBody
java
@PostMapping("/users")
public void save(@RequestBody User user) {
}
- 接收请求体(JSON)
- 前后端分离必用
五、事务与切面相关注解
1. @Transactional
java
@Transactional
public void save() {
}
- 声明式事务
- 基于 AOP 实现
Spring AOP 最典型的应用场景
2. @Aspect
java
@Aspect
@Component
public class LogAspect {
}
- 声明切面类
3. @Before / @After / @Around
java
@Before("execution(* com.example.*.*(..))")
- 定义通知类型
- 控制增强时机
六、生命周期与扩展相关注解
1. @PostConstruct
java
@PostConstruct
public void init() {
}
- Bean 初始化后执行
- JSR 标准注解
2. @PreDestroy
java
@PreDestroy
public void destroy() {
}
- Bean 销毁前执行
七、校验与条件注解
1. @Valid / @Validated
java
public void save(@Valid User user) {
}
- 参数校验
- 常用于 Controller 层
2. @Conditional
java
@Conditional(MyCondition.class)
- 条件装配
- Spring Boot 自动配置的基础
八、总结
Spring 中的注解,本质上都是在告诉容器:哪些类要管、什么时候管、怎么管。