网站首页 > 博客文章 正文
引言
Spring Boot的注解体系是其“约定优于配置”理念的核心载体。但面对海量注解,开发者常陷入两难:记不住、用不对、分不清。本文系统梳理Spring Boot开发中高频使用的85个注解,按应用场景分类,本文配合代码示例和避坑指南,助你成为注解运用高手!
一、核心启动注解(启动类必备)
1.@SpringBootApplication
作用:启动类标志注解(三合一复合注解)
等效拆分:
@SpringBootConfiguration // 标记为配置类
@EnableAutoConfiguration // 启用自动配置
@ComponentScan // 开启组件扫描
隐藏技巧:通过scanBasePackages属性指定非默认扫描路径:
@SpringBootApplication(scanBasePackages = "com.your.package")
二、Bean定义与管理(IOC容器核心)
2.组件声明四剑客
- @Component:通用组件标记(如工具类)
- @Service:业务逻辑层组件
- @Repository:数据访问层组件(会包装数据库异常)
- @Controller/ @RestController:Web层控制器
3.@Bean
场景:注册第三方库组件或复杂对象
@Configuration
public class AppConfig {
@Bean(name = "myDataSource", initMethod = "init")
@Lazy // 延迟初始化
public DataSource dataSource() {
return new HikariDataSource();
}
}
4.条件化注册注解
- @ConditionalOnClass:类路径存在指定类时生效
- @ConditionalOnProperty:根据配置文件动态注册
@Bean
@ConditionalOnProperty(name = "cache.enabled", havingValue = "true")
public CacheManager cacheManager() { /*...*/ }
三、Web开发(RESTful接口与MVC)
5.请求映射注解
- @GetMapping("/users") :等价于@RequestMapping(method = RequestMethod.GET)
- @PostMapping、 @PutMapping、@DeleteMapping同理
高阶用法:
@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public User getUser(@PathVariable Long id) { /*...*/ }
6.参数处理注解
- @PathVariable:获取URL路径参数
- @RequestParam:获取查询参数(可设置默认值)
- @RequestBody:接收JSON请求体
- @RequestHeader:获取请求头信息
7.响应处理注解
- @ResponseStatus(HttpStatus.CREATED) :自定义HTTP状态码
- @CrossOrigin:解决跨域问题(生产环境建议网关统一处理)
四、数据访问(JPA/MyBatis整合)
8.JPA核心注解
- @Entity:标记JPA实体类
- @Table(name = "user") :指定数据库表名
- @Id、 @GeneratedValue:主键生成策略
@Entity
@Table(name = "tbl_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
9.事务控制
- @Transactional:声明式事务管理
关键属性:
@Transactional(
isolation = Isolation.DEFAULT,
propagation = Propagation.REQUIRED,
rollbackFor = Exception.class
)
五、配置与属性绑定(YAML/Properties解析)
10.@Value:注入简单属性
@Value("${server.port:8080}") // 带默认值
private Integer port;
11.@ConfigurationProperties:批量绑定配置
@ConfigurationProperties(prefix = "app")
@Data // Lombok注解
public class AppConfig {
private String name;
private List<String> ipWhitelist;
}
六、高级特性(AOP/调度/缓存)
12.AOP注解
- @Aspect:定义切面类
- @Around、 @Before、 @After:定义通知类型
@Aspect
@Component
public class LogAspect {
@Around("execution(* com.example.service.*.*(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
// 记录方法执行时间...
}
}
13.定时任务
- @Scheduled:定义执行周期
@Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点执行
public void clearTempFiles() { /*...*/ }
14.缓存控制
- @Cacheable:缓存方法结果
- @CacheEvict:清除缓存
@Cacheable(value = "users", key = "#id")
public User getUser(Long id) { /*...*/ }
七、测试相关(单元/集成测试)
15.@SpringBootTest:启动完整Spring上下文测试
16.@MockBean:注入Mock对象(如模拟数据库调用)
@SpringBootTest
class UserServiceTest {
@MockBean
private UserRepository userRepository;
@Test
void testFindUser() {
Mockito.when(userRepository.findById(1L)).thenReturn(new User());
// 测试逻辑...
}
}
八、实用冷门注解(高手必备)
17.@Order:
控制Bean加载顺序
18.@Primary:
解决多个同类型Bean冲突
19.@Profile:
环境差异化配置(如dev/test/prod)
@Bean
@Profile("dev") // 仅在开发环境生效
public DataSource devDataSource() { /*...*/ }
20.@Retryable:方法失败自动重试(需引入spring-retry)
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 1000))
public void callUnstableApi() { /*...*/ }
结语
Spring Boot注解体系的精髓在于用声明代替编码。建议开发者:
- 掌握注解的组合使用(如@Validated+@RequestBody)
- 理解注解的底层原理(如@Transactional基于AOP实现)
- 避免注解滥用(如过度使用@Autowired导致耦合)
- 上一篇: 用配置作为代码设置 Jenkins 实例(使用 Yaml 配置)
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-05-25 用配置作为代码设置 Jenkins 实例(使用 Yaml 配置)
- 2025-05-25 Spring Cloud Alibaba Nacos Config 是如何读取配置的?
- 2025-05-25 Nacos 统一配置中心动态刷新机制真香
- 2025-05-25 Nacos:简单易用的配置管理和服务发现注册中心
- 2025-05-25 kustomize编排k8s的yaml文件
你 发表评论:
欢迎- 380℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 375℃用AI Agent治理微服务的复杂性问题|QCon
- 373℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 366℃初次使用IntelliJ IDEA新建Maven项目
- 359℃Maven技术方案最全手册(mavena)
- 356℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 354℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 353℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)