
正确使用 SpringBoot 注解,可以减少不必要的配置和维护工作,让我们更加专注于业务逻辑的实现,极大地简化了开发流程。
反之,如果 SpringBoot 注解使用不当,可能会导致代码难以维护、性能下降、甚至出现安全漏洞。
本文,全面总结了 25 个最为核心的 SpringBoot 注解,以及其作用、功能和使用示例。
大家好,我是爱分享的程序员宝妹儿。
点击蓝字可获取: SpringBoot 面试题合集(最新整理)
| 注解名 | 作用 |
|---|---|
| @SpringBootApplication | 标记 Spring Boot 应用的主类,并自动进行配置 |
| @RestController | 声明一个控制器类,用于处理 RESTful 请求 |
| @RequestMapping | 映射 HTTP 请求的路径到控制器的方法上 |
| @Autowired | 自动装配依赖对象 |
| @ComponentScan | 扫描指定包及其子包下的组件,并将其注册为 Spring 管理的 Bean |
| @Configuration | 声明一个配置类 |
| @Bean | 声明一个 Bean 对象 |
| @Value | 注入外部配置文件中的属性值到变量中 |
| @Profile | 根据指定的配置文件激活或禁用 Bean 的加载 |
| @Conditional | 根据指定的条件决定是否加载 Bean |
| @PathVariable | 获取 URL 路径中的参数值 |
| @RequestParam | 获取请求参数的值 |
| @RequestBody | 将请求体中的内容绑定到方法参数上 |
| @PostMapping | 处理 HTTP POST 请求 |
| @GetMapping | 处理 HTTP GET 请求 |
| @Service | 声明一个服务层组件 |
| @Repository | 声明一个数据访问层组件 |
| @EnableAutoConfiguration | 自动配置 Spring Boot 应用的类路径下的所有配置 |
| @EnableCaching | 启用 Spring 缓存功能 |
| @EnableAsync | 启用异步方法的执行 |
| @Transactional | 声明事务的范围 |
| @RestControllerAdvice | 全局控制器增强,用于处理全局异常、全局数据绑定等 |
| @Validated | 参数校验注解,用于标记需要进行参数校验的类或方法 |
| @ConfigurationProperties | 将配置文件中的属性值绑定到一个 Bean 对象上 |
| @Scheduled | 标记一个方法为定时任务方法,用于定时执行任务 |
1. @SpringBootApplication
@SpringBootApplication 是一个组合注解,用于标注 SpringBoot 应用程序的主类。
它包含了@Configuration、@EnableAutoConfiguration 和 @ComponentScan 注解的功能,简化了配置和启动过程。
示例:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2. @RestController
@RestController 注解用于标注控制器类,表示该类处理 HTTP 请求并返回 RESTful 风格的响应。
它相当于 @Controller 和 @ResponseBody 的组合,简化了开发 RESTful 接口的过程。
示例:
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
// 返回用户列表
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户
}
}
3. @RequestMapping
@RequestMapping 注解用于映射 HTTP 请求路径到控制器的方法上。
可以用于处理 GET、POST、PUT、DELETE 等不同类型的请求,并支持路径变量、请求参数等的定义。
示例:
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
// 返回用户列表
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据用户ID获取用户信息
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户
}
@PutMapping("/users/{id}")
public User updateUser(@PathVariable("id") Long id, @RequestBody User user) {
// 根据用户ID更新用户信息
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable("id") Long id) {
// 根据用户ID删除用户
}
4. @Autowired
@Autowired 注解用于自动装配依赖对象,实现对象的自动注入。
它可以用于构造方法、属性和方法上,简化了依赖注入的配置过程。
示例:
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// 其他业务方法...
}
5. @ComponentScan
@ComponentScan 注解用于自动扫描并注册 Spring 组件,包括控制器、服务、存储库等。
它会根据指定的包路径自动发现标有 @Component 及其派生注解的类,并将其注册为 Spring 组件。
示例:
@SpringBootApplication
@ComponentScan("com.example")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6. @Configuration
@Configuration 注解用于标识配置类,表示该类包含 Bean 定义的方法。
在 SpringBoot 中,通常与 @Bean 注解一起使用,用于定义和注册 Bean。
示例:
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
// 其他Bean定义方法...
}
7. @Bean
@Bean 注解用于定义 Bean 对象,表示该方法返回的对象将被 Spring 容器管理。
在 @Configuration 注解的类中使用,用于声明依赖对象的创建和配置。
示例:
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
// 其他Bean定义方法...
}
8. @Value
@Value 注解用于注入外部配置文件中的属性值到变量中。
它可以用于字段、方法参数和方法返回值,使得配置值的使用更加方便。
示例:
@Service
public class UserService {
@Value("${app.user.defaultRole}")
private String defaultRole;
// 其他业务方法
}
9. @Profile
@Profile 注解用于标记特定的配置或组件,使其在特定的环境或配置条件下生效。
可以通过在应用程序的配置文件中设置不同的profile来选择性地加载相应的配置和组件。
示例:
@Configuration
@Profile("development")
public class DevelopmentConfig {
// 开发环境下的配置...
}
@Configuration
@Profile("production")
public class ProductionConfig {
// 生产环境下的配置...
}
10. @Conditional
@Conditional 注解用于根据条件来决定是否注册 Bean 或配置组件。
可以根据特定的条件判断,动态地控制 Bean 的创建和注册过程。
示例:
@Configuration
public class ConditionalConfig {
@Bean
@Conditional(DatabaseTypeCondition.class)
public DataSource dataSource() {
// 根据条件判断选择不同的数据源类型进行创建和配置
}
}
public class DatabaseTypeCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// 根据特定条件判断是否满足创建数据源的条件
}
}
11. @PathVariable
@PathVariable 注解用于从请求路径中获取路径变量的值,并将其绑定到方法参数中。
示例:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据id查询用户信息
return userService.getUserById(id);
}
12. @RequestParam
@RequestParam 注解用于获取请求参数的值,并将其绑定到方法参数中。
示例:
@PostMapping("/users")
public User createUser(@RequestParam("name") String name,
@RequestParam("age") int age) {
// 创建用户并返回结果
return userService.createUser(name, age);
}
13. @RequestBody
@RequestBody 注解用于将请求体的内容绑定到方法参数或对象中。
示例:
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户并返回结果
return userService.createUser(user);
}
14. @PostMapping
@PostMapping 注解用于将方法映射到 HTTP POST 请求,并指定请求路径。
示例:
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户并返回结果
return userService.createUser(user);
}
15. @GetMapping
@GetMapping 注解用于将方法映射到 HTTP GET 请求,并指定请求路径。
示例:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
// 根据id查询用户信息
return userService.getUserById(id);
}
16. @Service
@Service 注解用于标识一个类为业务逻辑层的组件,由 Spring 进行管理。
示例:
@Service
public class UserService {
// 业务逻辑代码
}
17. @Repository
@Repository 注解用于标识一个类为数据访问层的组件,由 Spring 进行管理。
示例:
@Repository
public class UserRepository {
// 数据访问代码
}
18. @EnableAutoConfiguration
@EnableAutoConfiguration 注解用于启用 SpringBoot 的自动配置功能,根据项目的依赖自动配置应用程序。
示例:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
19. @EnableCaching
@EnableCaching 注解用于启用 Spring 的缓存功能,可以在方法上添加缓存相关的注解,例如 @Cacheable、@CacheEvict 等,以实现方法级别的缓存控制。
示例:
@Service
@EnableCaching
public class ProductService {
@Cacheable("products")
public List<Product> getAllProducts() {
// 从数据库中获取产品列表
return productRepository.getAllProducts();
}
@CacheEvict(value = "products", allEntries = true)
public void refreshCache() {
// 清除产品缓存
}
}
20. @EnableAsync
@EnableAsync 注解用于启用 Spring 的异步方法执行功能,可以在方法上添加 @Async 注解,使方法异步执行。
示例:
@Service
@EnableAsync
public class EmailService {
@Async
public void sendEmail(String recipient, String message) {
// 异步发送邮件
}
}
21. @Transactional
@Transactional 注解用于标识方法或类需要在事务管理下执行,保证方法的原子性和一致性。
示例:
@Service
public class OrderService {
@Transactional
public void createOrder(Order order) {
// 创建订单并保存到数据库
}
}
22. @RestControllerAdvice
@RestControllerAdvice 注解用于定义全局异常处理器,处理应用中抛出的异常,并返回适当的响应信息。
示例:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception ex) {
// 处理异常并返回响应
}
}
23. @Validated
@Validated 注解用于在控制器方法的参数上添加校验注解,实现请求参数的校验功能。
示例:
@RestController
public class UserController {
@PostMapping("/users")
public User createUser(@Validated @RequestBody User user) {
// 校验用户信息并创建用户
}
}
24. @ConfigurationProperties
@ConfigurationProperties 注解用于将外部配置文件中的属性值绑定到Bean中,实现配置的统一管理。
示例:
@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private String version;
// 省略getter和setter
}
25. @Scheduled
@Scheduled 注解用于指定方法定时执行的时间规则,实现定时任务的功能。
示例:
@Service
public class TaskService {
@Scheduled(cron = "0 0 0 * * ?")
public void runDailyTask() {
// 每天执行一次的任务
}
}
总结
SpringBoot 的核心注解提供了简化开发、减少配置和提高效率的功能,对于快速开发高效的应用程序至关重要。
正确使用 SpringBoot 的核心注解,可以减少繁琐的配置工作,专注于业务逻辑的实现,提高开发效率和质量。
以上是常用的 SpringBoot 注解,以及其作用、功能和示例代码的总结,希望对大家有用。
我是爱分享的程序员宝妹儿,谢谢关注 Java面试题宝。
如果觉得不错,请【点赞+转发+关注】一键三连支持下。
—end—
