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

相关推荐
唐叔在学习2 小时前
【Git神技】三步搞定指定分支克隆,团队协作效率翻倍!
git·后端
咸菜一世2 小时前
Scala的while语句循环
后端
嚴寒2 小时前
Halo 博客系统部署配置
后端
稚辉君.MCA_P8_Java3 小时前
Git 基础 - 查看提交历史
spring boot·git·微服务·云原生·kubernetes
卷Java3 小时前
用户权限控制功能实现说明
java·服务器·开发语言·数据库·servlet·微信小程序·uni-app
从零开始学习人工智能3 小时前
Spring Security 实战:彻底解决 CORS 跨域凭据问题与 WebSocket 连接失败
java·websocket·spring
winrisef3 小时前
删除无限递归文件夹
java·ide·python·pycharm·系统安全
悦悦子a啊3 小时前
Java面向对象练习:Person类继承与排序
java·开发语言·python
不会算法的小灰3 小时前
Spring Boot 实现邮件发送功能:整合 JavaMailSender 与 FreeMarker 模板
java·spring boot·后端