正确使用 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—