Spring Boot 常用注解分类整理(含用法示例)
在Spring Boot开发中,注解是简化配置、实现功能的核心。以下是常用注解的分类整理,包含其作用和典型用法:
一、启动类与配置类注解
- @SpringBootApplication
Spring Boot应用的核心注解,用于标识主启动类,整合了三个注解:
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
@SpringBootConfiguration
:标识当前类为配置类(类似@Configuration
)@EnableAutoConfiguration
:开启自动配置(Spring Boot的核心特性)@ComponentScan
:自动扫描当前类所在包及子包的组件(如@Controller
、@Service
等)
用法:
- @Configuration
标识当前类为配置类,替代传统XML配置文件,可通过@Bean
定义Bean。
用法:
@Configuration
public class AppConfig {@Bean // 定义一个Bean,默认名称为方法名public UserService userService() {return new UserService();}
}
- @Bean
用于@Configuration
类中,定义一个Spring管理的Bean,默认名称为方法名,可通过name
属性指定。
二、组件注册注解( stereotype 注解)
用于标识类为Spring管理的组件,自动被@ComponentScan
扫描并注册到容器中。
- @Component:通用组件注解,适用于任何层。
- @Controller:标识控制器类(MVC中的C层),处理HTTP请求。
- @Service:标识服务类(业务逻辑层)。
- @Repository:标识数据访问类(DAO层),自动处理数据库操作异常。
三、依赖注入注解
用于实现Bean之间的依赖注入(DI)。
- @Autowired
按类型自动注入依赖,可用于构造方法、字段、setter方法。
用法:
@Service
public class UserService {// 注入UserDao(按类型匹配)@Autowiredprivate UserDao userDao;
}
- @Qualifier
配合@Autowired
使用,当存在多个同类型Bean时,通过名称指定注入哪个。
@Autowired
@Qualifier("userDaoImpl") // 指定注入名称为userDaoImpl的Bean
private UserDao userDao;
- @Resource
按名称注入依赖(JDK自带注解),名称可通过name
属性指定,默认取字段名。
@Resource(name = "userDaoImpl")
private UserDao userDao;
- @Value
注入配置文件中的值(如application.properties
),支持SpEL表达式。
@Value("${app.name}") // 注入配置项app.name的值
private String appName;@Value("#{T(java.lang.Math).random() * 100}") // SpEL表达式
private double randomNum;
四、Web请求处理注解
- @RestController
组合@Controller
和@ResponseBody
,标识控制器类,所有方法返回值直接转为JSON(无需额外加@ResponseBody
)。 - @RequestMapping
映射HTTP请求(URL、方法、参数等),可用于类或方法上。
@RestController
@RequestMapping("/users") // 类级别映射:所有方法路径前缀为/users
public class UserController {@RequestMapping(value = "/{id}", method = RequestMethod.GET) // 方法级别映射public User getUser(@PathVariable Long id) {return userService.getUser(id);}
}
- HTTP方法专用注解
简化@RequestMapping
的method属性:@GetMapping
:处理GET请求(查)@PostMapping
:处理POST请求(增)@PutMapping
:处理PUT请求(改)@DeleteMapping
:处理DELETE请求(删)
- 请求参数绑定注解
@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)。
示例:
五、配置属性绑定注解
- @ConfigurationProperties
将配置文件中的属性批量绑定到一个类上,通常配合@Component
使用。
示例:
@Component
@ConfigurationProperties(prefix = "app") // 绑定前缀为app的配置
public class AppConfig {private String name;private String version;// 需提供getter/setter
}
配置文件(application.properties
):
app.name=demo
app.version=1.0.0
六、事务管理注解
- @Transactional
标识方法或类需要事务支持,Spring会自动管理事务的提交/回滚。
用法:
@Service
public class UserService {@Transactional // 该方法开启事务public void updateUser(User user) {// 数据库操作(若异常则自动回滚)}
}
七、异常处理注解
- @ControllerAdvice
标识全局异常处理类,配合@ExceptionHandler
使用。 - @ExceptionHandler
定义异常处理方法,指定处理的异常类型。
示例:
@ControllerAdvice
public class GlobalExceptionHandler {// 处理NullPointerException@ExceptionHandler(NullPointerException.class)public ResponseEntity<String> handleNullPointerException(NullPointerException e) {return ResponseEntity.badRequest().body("空指针异常:" + e.getMessage());}
}
八、其他常用注解
- @CrossOrigin:处理跨域请求,可用于类或方法。
@CrossOrigin(origins = "http://localhost:8080") // 允许来自该域名的跨域请求
@RestController
public class UserController { ... }
- @Async:标识方法为异步执行(需配合
@EnableAsync
开启异步支持)。 - @Scheduled:标识定时任务方法(需配合
@EnableScheduling
开启定时任务)。
这些注解覆盖了Spring Boot开发的核心场景,掌握它们能大幅提升开发效率。实际使用中,需根据具体业务场景选择合适的注解组合。