在 Spring 和 Spring Boot 框架中,有许多核心注解被广泛应用。以下是常用的关键注解分类详解:
一、组件声明与依赖注入
注解 | 作用 | 示例 |
---|
@Component | 通用组件声明 (Bean 的泛化形式) | @Component public class ServiceImpl {...} |
@Service | 标记服务层(业务逻辑层)组件 | @Service public class UserService {...} |
@Repository | 标记持久层(DAO 层)组件,自动处理数据库异常 | @Repository public class UserDao {...} |
@Controller | 标记 Web 控制器组件 | @Controller public class UserCtrl {...} |
@RestController | @Controller + @ResponseBody (REST API 专用) | @RestController public class ApiCtrl {...} |
@Autowired | 自动按类型依赖注入 | @Autowired private UserService service; |
@Qualifier | 按名称指定注入的 Bean | @Qualifier("mainDB") DataSource ds; |
@Resource | JSR-250 标准注入(按名称) | @Resource(name="slaveDB") DataSource ds; |
二、配置与属性管理
注解 | 作用 |
---|
@Configuration | 声明配置类(替代 XML 配置) |
@Bean | 声明方法返回对象作为 Spring Bean |
@Value | 注入外部配置值(${property.key} ) |
@ConfigurationProperties | 批量绑定配置文件到 POJO(比 @Value 更结构化) |
@PropertySource | 加载自定义 properties 文件 |
@EnableConfigurationProperties | 启用配置属性绑定 |
三、Web 与请求处理
注解 | HTTP 方法 | 作用 |
---|
@RequestMapping | 通用映射 | 类/方法级别的请求映射 |
@GetMapping | GET | 简化版 GET 请求映射 |
@PostMapping | POST | 简化版 POST 请求映射 |
@PutMapping | PUT | 简化版 PUT 请求映射 |
@DeleteMapping | DELETE | 简化版 DELETE 请求映射 |
@PatchMapping | PATCH | 简化版 PATCH 请求映射 |
@RequestParam | - | 获取 URL 查询参数 |
@PathVariable | - | 获取 URL 路径变量 |
@RequestBody | - | 接收 HTTP 请求体(如 JSON) |
@ResponseBody | - | 直接返回数据(非视图) |
@CookieValue | - | 获取 Cookie 值 |
@SessionAttribute | - | 访问会话属性 |
四、事务管理
注解 | 作用 |
---|
@Transactional | 声明式事务管理(类/方法级) |
@EnableTransactionManagement | 在配置类启用注解驱动的事务管理 |
五、测试相关
注解 | 作用 |
---|
@SpringBootTest | 启动完整的 Spring Boot 测试环境 |
@WebMvcTest | 专注于 MVC 控制器的测试(不加载完整上下文) |
@DataJpaTest | 专注于 JPA 测试(使用内存数据库) |
@MockBean | 在测试上下文中注入 Mock 对象 |
@Test | 标记测试方法(JUnit) |
六、AOP 面向切面编程
注解 | 作用 |
---|
@Aspect | 声明切面类 |
@Before | 方法执行前切入 |
@After | 方法执行后切入(无论是否异常) |
@AfterReturning | 方法正常返回后切入 |
@AfterThrowing | 方法抛出异常后切入 |
@Around | 环绕增强(最强大的通知类型) |
@Pointcut | 定义可重用的切入点表达式 |
七、条件化配置 (Spring Boot)
注解 | 作用 |
---|
@ConditionalOnProperty | 当配置属性存在且匹配时生效 |
@ConditionalOnBean | 当指定 Bean 存在时生效 |
@ConditionalOnMissingBean | 当指定 Bean 不存在时生效 |
@ConditionalOnClass | 当指定类在 classpath 存在时生效 |
@ConditionalOnWebApplication | 当是 Web 应用时生效 |
八、调度与异步
注解 | 作用 |
---|
@Scheduled | 定时任务调度(支持 cron 表达式) |
@EnableScheduling | 启用定时任务支持 |
@Async | 异步执行方法 |
@EnableAsync | 启用异步执行支持 |
九、缓存管理
注解 | 作用 |
---|
@Cacheable | 缓存方法结果 |
@CachePut | 更新缓存 |
@CacheEvict | 清除缓存 |
@EnableCaching | 启用缓存注解支持 |
十、其他实用注解
注解 | 作用 |
---|
@Lazy | 延迟初始化 Bean |
@Primary | 指定同类型 Bean 的优先注入选项 |
@Scope | 定义 Bean 作用域(singleton, prototype 等) |
@Profile | 按环境激活配置(dev, test, prod) |
@Valid | 触发 JSR-303 Bean 校验(配合 @NotNull 等) |
📌 最佳实践建议:
- 优先使用
@ConfigurationProperties
替代分散的 @Value
- REST API 开发首选
@RestController
+ HTTP 方法注解 - 数据库操作使用
@Transactional
确保事务完整性 - 生产环境配置
@Profile("prod")
分离环境参数
这些注解共同构成了 Spring 生态的基石,通过声明式编程极大简化了企业级应用开发。掌握它们是高效使用 Spring 框架的关键。