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开发的核心场景,掌握它们能大幅提升开发效率。实际使用中,需根据具体业务场景选择合适的注解组合。

相关推荐
g***B7382 小时前
Java 工程复杂性的真正来源:从语言设计到现代架构的全链路解析
java·人工智能·架构
期待のcode4 小时前
MyBatisX插件
java·数据库·后端·mybatis·springboot
醇氧6 小时前
【Windows】优雅启动:解析一个 Java 服务的后台启动脚本
java·开发语言·windows
sunxunyong6 小时前
doris运维命令
java·运维·数据库
菜鸟起航ing6 小时前
Spring AI 全方位指南:从基础入门到高级实战
java·人工智能·spring
古城小栈7 小时前
Docker 多阶段构建:Go_Java 镜像瘦身运动
java·docker·golang
华仔啊7 小时前
这 10 个 MySQL 高级用法,让你的代码又快又好看
后端·mysql
MapGIS技术支持7 小时前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
Coder_Boy_7 小时前
业务导向型技术日志首日记录(业务中使用的技术栈)
java·驱动开发·微服务
码事漫谈7 小时前
国产时序数据库崛起:金仓凭什么在复杂场景中碾压InfluxDB
后端