前言
在使用SpringBoot开发中或者在求职面试中都会使用到很多注解或者问到注解相关的知识。本文主要对一些常用的注解进行了总结,同时也会举出具体例子,供大家学习和参考。
注解一览表
启动类以及配置类相关
@SpringBootApplication
解释:
- @SpringBootApplication是组合注解。相当于@Configuration、@EnableAutoConfiguration、@ComponentScan的组合。
- 用于标记启动类,指出应用入口。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@Configuration
解释:
- 声明当前类为配置类。相当于xml配置中的beans标签。
@Configuration
public class MyConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
@EnableAutoConfiguration
解释:
- 开启SpringBoot自动装配功能。
@SpringBootApplication
@EnableAutoConfiguration
public class MyApplication {
// ...
}
@ComponentScan
解释:
- 配置SpringBoot扫描包路径。
@SpringBootApplication
@ComponentScan("com.example")
public class MyApplication {
// ...
}
控制层相关
@RestController
解释:
- @RestController注解用于定义控制器类,将其返回的结果自动转换为JSON格式
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getAllUsers() {
// 返回所有用户列表的逻辑
}
}
@RequestMapping
解释:
- 用于映射HTTP请求到处理器上,指定处理器方法的URL路径和HTTP请求方法。
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据id获取用户的逻辑
}
}
@GetMapping、@PostMapping、@DeleteMapping、@PutMapping
解释:
- @GetMapping注解用于处理HTTP的GET请求,并将请求映射到相应的处理器方法上。
- @PostMapping注解用于处理HTTP的POST请求,并将请求映射到相应的处理器方法上。
- @DeleteMapping注解用于处理HTTP的DELETE请求,并将请求映射到相应的处理器方法上。
- @PutMapping是Spring框架中用于处理HTTP的PUT请求的注解。PUT请求通常用于更新资源,即将新的数据替换掉指定的资源。
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据id获取用户的逻辑
}
}
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public User createUser(@RequestBody User user) {
// 创建用户的逻辑
}
}
@RestController
@RequestMapping("/users")
public class UserController {
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable("id") Long id) {
// 删除用户的逻辑
}
}
@RestController
@RequestMapping("/users")
public class UserController {
@PutMapping("/{id}")
public User updateUser(@PathVariable("id") Long id, @RequestBody User user) {
// 更新用户信息的逻辑
}
}
@RequestParam
解释:
- @RequestParam注解用于获取请求参数的值,并将其绑定到处理器方法的形参上。一般用于路径中?传参形式。
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping
public List<User> getUsersByPage(@RequestParam("page") int page,
@RequestParam(value = "size", defaultValue = "10") int size) {
// 分页查询用户列表的逻辑
}
}
@PathVariable
解释:
- 用于获取URL路径中的变量值,并将其绑定到处理器方法的形参上。一般用于/传参的形式。
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据id获取用户的逻辑
}
}
@RequestBody
解释:
- 用于接收HTTP请求的请求体内容,并将其转化为对应的Java对象或其他类型的参数。
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public User createUser(@RequestBody User user) {
// 创建用户的逻辑
}
}
@Valid
解释:
- @Valid用于开启数据验证功能,对方法参数进行校验,确保其满足定义的验证规则
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
// 创建用户的逻辑
return ResponseEntity.status(HttpStatus.CREATED).body(user);
}
}
Bean管理相关
- @Autowired: 自动装配,用于自动注入依赖的Bean实例。
- @Service: 用于标识一个服务类,表示它是业务逻辑层的组件。
- @Repository: 用于标识一个数据访问类,表示它是数据访问层的组件。
- @Component: 通用的Spring组件注解,用于标识一个普通的Bean组件。
- @Value: 注入配置文件中的值到对应的变量中。
异步和定时相关
@EnableScheduling、@Scheduled
解释:
- @EnableScheduling:启动类添加@EnableScheduling开启任务调度功能。
- @Scheduled:定时任务注解,用于标识定时任务的方法。
@SpringBootApplication
@EnableScheduling
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
@Component
public class MyScheduler {
@Scheduled(fixedRate = 5000)
public void myTask() {
// 每个5秒执行一次的任务逻辑
}
}
@Component
public class MyScheduler {
@Scheduled(cron = "0 0 8 * * ?")
public void myTask() {
// 每天早上8点执行的任务逻辑
}
}
@EnableAsync、@Async
解释:
- @EnableAsync:启动类添加,开启异步任务。
- @Async:标识异步任务方法。
@SpringBootApplication
@EnableAsync
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
@Service
public class MyService {
@Async
public CompletableFuture<String> asyncTask() {
// 异步执行的任务逻辑
// 返回一个CompletableFuture以支持异步结果的处理
}
}
缓存和事务管理
解释:
- @EnableCaching: 开启Spring的缓存支持,用于缓存方法的结果,提高性能。
- @Transactional: 提供声明式事务管理,用于标识需要使用事务的方法或类。
- @EnableTransactionManagement: 开启事务管理支持,用于启用Spring的声明式事务管理功能
@SpringBootApplication
@EnableCaching
@EnableTransactionManagement
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
@Service
public class MyService {
@Transactional
public void performTransaction() {
// 执行数据库操作等需要事务管理的逻辑
}
}
异常处理相关
@RestControllerAdvice、@ExceptionHandler
- @RestControllerAdvice:结合了@ControllerAdvice和@ResponseBody注解的功能。它用于定义全局的异常处理和统一的响应处理。
- @ExceptionHandler:指定类型的异常进行统一处理。
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
// 异常处理逻辑,可以根据实际需求进行对异常的处理和返回相应的错误信息
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");
}
}
写在最后
有关于SpringBoot常用注解到此就结束了。