在 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 框架的关键。