专业的编程技术博客社区

网站首页 > 博客文章 正文

SpringBoot注解终极宝典,这80+注解让你的开发效率飙升!

baijin 2025-05-25 10:35:42 博客文章 8 ℃ 0 评论

引言

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注解体系的精髓在于用声明代替编码。建议开发者:

  1. 掌握注解的组合使用(如@Validated+@RequestBody
  2. 理解注解的底层原理(如@Transactional基于AOP实现)
  3. 避免注解滥用(如过度使用@Autowired导致耦合)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表