Spring Boot 常用注解分类整理(含用法示例)

在Spring Boot开发中,注解是简化配置、实现功能的核心。以下是常用注解的分类整理,包含其作用和典型用法:

一、启动类与配置类注解

  1. @SpringBootApplication
    Spring Boot应用的核心注解,用于标识主启动类,整合了三个注解:
java 复制代码
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  • @SpringBootConfiguration:标识当前类为配置类(类似@Configuration
  • @EnableAutoConfiguration:开启自动配置(Spring Boot的核心特性)
  • @ComponentScan:自动扫描当前类所在包及子包的组件(如@Controller@Service等)
    用法:
  1. @Configuration
    标识当前类为配置类,替代传统XML配置文件,可通过@Bean定义Bean。
    用法:
java 复制代码
@Configuration
public class AppConfig {
    @Bean // 定义一个Bean,默认名称为方法名
    public UserService userService() {
        return new UserService();
    }
}
  1. @Bean
    用于@Configuration类中,定义一个Spring管理的Bean,默认名称为方法名,可通过name属性指定。

二、组件注册注解( stereotype 注解)

用于标识类为Spring管理的组件,自动被@ComponentScan扫描并注册到容器中。

  • @Component:通用组件注解,适用于任何层。
  • @Controller:标识控制器类(MVC中的C层),处理HTTP请求。
  • @Service:标识服务类(业务逻辑层)。
  • @Repository:标识数据访问类(DAO层),自动处理数据库操作异常。

三、依赖注入注解

用于实现Bean之间的依赖注入(DI)。

  1. @Autowired
    按类型自动注入依赖,可用于构造方法、字段、setter方法。
    用法:
java 复制代码
@Service
public class UserService {
    // 注入UserDao(按类型匹配)
    @Autowired
    private UserDao userDao;
}
  1. @Qualifier
    配合@Autowired使用,当存在多个同类型Bean时,通过名称指定注入哪个。
java 复制代码
@Autowired
@Qualifier("userDaoImpl") // 指定注入名称为userDaoImpl的Bean
private UserDao userDao;
  1. @Resource
    按名称注入依赖(JDK自带注解),名称可通过name属性指定,默认取字段名。
java 复制代码
@Resource(name = "userDaoImpl")
private UserDao userDao;
  1. @Value
    注入配置文件中的值(如application.properties),支持SpEL表达式。
java 复制代码
@Value("${app.name}") // 注入配置项app.name的值
private String appName;

@Value("#{T(java.lang.Math).random() * 100}") // SpEL表达式
private double randomNum;

四、Web请求处理注解

  1. @RestController
    组合@Controller@ResponseBody,标识控制器类,所有方法返回值直接转为JSON(无需额外加@ResponseBody)。
  2. @RequestMapping
    映射HTTP请求(URL、方法、参数等),可用于类或方法上。
java 复制代码
@RestController
@RequestMapping("/users") // 类级别映射:所有方法路径前缀为/users
public class UserController {
    @RequestMapping(value = "/{id}", method = RequestMethod.GET) // 方法级别映射
    public User getUser(@PathVariable Long id) {
        return userService.getUser(id);
    }
}
  1. HTTP方法专用注解
    简化@RequestMapping的method属性:
    • @GetMapping:处理GET请求(查)
    • @PostMapping:处理POST请求(增)
    • @PutMapping:处理PUT请求(改)
    • @DeleteMapping:处理DELETE请求(删)
  2. 请求参数绑定注解
java 复制代码
@PostMapping
public User addUser(@RequestBody User user) { // 接收请求体的JSON并转为User对象
    return userService.addUser(user);
}

@GetMapping("/search")
public List<User> search(@RequestParam(required = false) String name) { // 可选参数
    return userService.findByName(name);
}
  • @PathVariable:获取URL路径中的参数(如/users/{id}中的id)。
  • @RequestParam:获取URL查询参数(如/users?name=xxx中的name)。
  • @RequestBody:获取HTTP请求体中的数据(通常用于POST/PUT,接收JSON)。
    示例:

五、配置属性绑定注解

  1. @ConfigurationProperties
    将配置文件中的属性批量绑定到一个类上,通常配合@Component使用。
    示例:
java 复制代码
@Component
@ConfigurationProperties(prefix = "app") // 绑定前缀为app的配置
public class AppConfig {
    private String name;
    private String version;
    // 需提供getter/setter
}

配置文件(application.properties):

properties 复制代码
app.name=demo
app.version=1.0.0

六、事务管理注解

  • @Transactional
    标识方法或类需要事务支持,Spring会自动管理事务的提交/回滚。
    用法:
java 复制代码
@Service
public class UserService {
    @Transactional // 该方法开启事务
    public void updateUser(User user) {
        // 数据库操作(若异常则自动回滚)
    }
}

七、异常处理注解

  1. @ControllerAdvice
    标识全局异常处理类,配合@ExceptionHandler使用。
  2. @ExceptionHandler
    定义异常处理方法,指定处理的异常类型。
    示例:
java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {
    // 处理NullPointerException
    @ExceptionHandler(NullPointerException.class)
    public ResponseEntity<String> handleNullPointerException(NullPointerException e) {
        return ResponseEntity.badRequest().body("空指针异常:" + e.getMessage());
    }
}

八、其他常用注解

  • @CrossOrigin:处理跨域请求,可用于类或方法。
java 复制代码
@CrossOrigin(origins = "http://localhost:8080") // 允许来自该域名的跨域请求
@RestController
public class UserController { ... }
  • @Async :标识方法为异步执行(需配合@EnableAsync开启异步支持)。
  • @Scheduled :标识定时任务方法(需配合@EnableScheduling开启定时任务)。

这些注解覆盖了Spring Boot开发的核心场景,掌握它们能大幅提升开发效率。实际使用中,需根据具体业务场景选择合适的注解组合。

相关推荐
Jul1en_2 分钟前
JVM的内存区域划分、类加载机制与垃圾回收原理
java·jvm
想不明白的过度思考者4 分钟前
Rust——Trait 定义与实现:从抽象到实践的深度解析
开发语言·后端·rust
绝无仅有6 分钟前
某短视频大厂的真实面试解析与总结(二)
后端·面试·架构
知了一笑6 分钟前
项目效率翻倍,做对了什么?
前端·人工智能·后端
凤年徐6 分钟前
Rust async/await 语法糖的展开原理:从表象到本质
开发语言·后端·rust
hogenlaw17 分钟前
自定义注解结合策略模式实现数据脱敏
spring boot
晨陌y23 分钟前
从 “不会” 到 “会写”:Rust 入门基础实战,用一个小项目串完所有核心基础
开发语言·后端·rust
程序员爱钓鱼27 分钟前
Python编程实战 - 函数与模块化编程 - 导入与使用模块
后端·python·ipython
程序员爱钓鱼30 分钟前
Python编程实战 - 函数与模块化编程 - 匿名函数(lambda)
后端·python·ipython