40 个 SpringBoot 常用注解:让生产力爆表!("SpringBoot必备40个注解:提升开发效率神器!")
原创
一、概述
Spring Boot 是一个开源的、基于 Spring 框架的微服务开发框架,它简化了基于 Spring 的应用程序的配置和部署。Spring Boot 提供了许多常用注解,这些注解可以帮助开发者敏捷构建高质量的应用程序。本文将介绍 40 个常用的 Spring Boot 注解,帮助开发者提升开发效能。
二、核心注解
以下是一些核心的 Spring Boot 注解,它们是构建应用程序的基础。
1. @SpringBootApplication
这个注解是一个复合注解,它包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。用于标识一个 Spring Boot 应用程序的入口类。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2. @ComponentScan
用于指定 Spring 在初始化时要扫描的包路径。
@SpringBootApplication
@ComponentScan(basePackages = {"com.example"})
public class Application {
// ...
}
3. @Configuration
用于定义配置类,替代 XML 配置文件。
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
4. @Bean
用于定义一个 Bean,将其注册到 Spring 容器中。
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
5. @EnableAutoConfiguration
用于启用自动配置。
三、控制层注解
以下是一些用于控制层的注解。
1. @Controller
用于定义一个控制器类。
@Controller
public class MyController {
// ...
}
2. @RestController
用于定义一个 RESTful 风格的控制器类。
@RestController
public class MyRestController {
// ...
}
3. @RequestMapping
用于映射 HTTP 请求到控制器的处理方法。
@Controller
public class MyController {
@RequestMapping("/index")
public String index() {
return "index";
}
}
4. @GetMapping
用于处理 GET 请求。
@RestController
public class MyRestController {
@GetMapping("/index")
public String index() {
return "index";
}
}
5. @PostMapping
用于处理 POST 请求。
@RestController
public class MyRestController {
@PostMapping("/create")
public String create(@RequestBody MyObject object) {
// ...
}
}
6. @PutMapping
用于处理 PUT 请求。
@RestController
public class MyRestController {
@PutMapping("/update")
public String update(@RequestBody MyObject object) {
// ...
}
}
7. @DeleteMapping
用于处理 DELETE 请求。
@RestController
public class MyRestController {
@DeleteMapping("/delete/{id}")
public String delete(@PathVariable("id") Long id) {
// ...
}
}
8. @PathVariable
用于从请求的 URL 中提取参数。
@RestController
public class MyRestController {
@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") Long id) {
// ...
}
}
9. @RequestParam
用于从请求参数中提取值。
@RestController
public class MyRestController {
@GetMapping("/search")
public String search(@RequestParam("query") String query) {
// ...
}
}
10. @RequestBody
用于从请求体中提取 JSON 数据。
@RestController
public class MyRestController {
@PostMapping("/create")
public String create(@RequestBody MyObject object) {
// ...
}
}
四、业务层注解
以下是一些用于业务层的注解。
1. @Service
用于定义一个业务层组件。
@Service
public class MyService {
// ...
}
2. @Transactional
用于声明一个方法需要事务赞成。
@Service
public class MyService {
@Transactional
public void updateData() {
// ...
}
}
五、持久层注解
以下是一些用于持久层的注解。
1. @Repository
用于定义一个数据访问组件。
@Repository
public class MyRepository {
// ...
}
2. @Query
用于自定义查询语句。
@Repository
public class MyRepository {
@Query("SELECT * FROM users WHERE name = :name")
List
findUsersByName(@Param("name") String name); }
3. @Modifying
用于声明一个方法为修改操作。
@Repository
public class MyRepository {
@Modifying
@Query("UPDATE users SET name = :name WHERE id = :id")
void updateUserName(@Param("name") String name, @Param("id") Long id);
}
六、其他常用注解
以下是一些其他常用的 Spring Boot 注解。
1. @Profile
用于指定某些配置只在特定的环境下生效。
@Configuration
@Profile("dev")
public class DevConfig {
// ...
}
2. @PropertySource
用于指定配置文件的位置。
@PropertySource("classpath:config.properties")
public class AppConfig {
// ...
}
3. @Conditional
用于条件装配,只有满足条件时才会创建 Bean。
@Configuration
@Conditional(MyCondition.class)
public class MyConfig {
// ...
}
4. @EnableConfigurationProperties
用于启用配置属性类。
@Configuration
@EnableConfigurationProperties(MyProperties.class)
public class AppConfig {
// ...
}
5. @Profile
用于指定配置在特定环境下生效。
@Profile("prod")
public class ProdConfig {
// ...
}
6. @Lazy
用于指定一个 Bean 在第一次被请求时才创建。
@Configuration
public class AppConfig {
@Lazy
@Bean
public MyBean myBean() {
return new MyBean();
}
}
7. @Order
用于指定多个相同类型的 Bean 的加载顺序。
@Configuration
@Order(1)
public class FirstConfig {
// ...
}
@Configuration
@Order(2)
public class SecondConfig {
// ...
}
8. @AutoConfigureAfter
用于指定某个配置类在其他配置类之后加载。
@Configuration
@AutoConfigureAfter(FirstConfig.class)
public class SecondConfig {
// ...
}
9. @AutoConfigureBefore
用于指定某个配置类在其他配置类之前加载。
@Configuration
@AutoConfigureBefore(FirstConfig.class)
public class SecondConfig {
// ...
}
10. @ConditionalOnBean
用于条件装配,只有当指定类型的 Bean 存在时才会创建当前 Bean。
@Configuration
@ConditionalOnBean(MyBean.class)
public class MyConfig {
// ...
}
11. @ConditionalOnMissingBean
用于条件装配,只有当指定类型的 Bean 不存在时才会创建当前 Bean。
@Configuration
@ConditionalOnMissingBean(MyBean.class)
public class MyConfig {
// ...
}
12. @ConditionalOnProperty
用于条件装配,只有当指定的配置属性存在时才会创建 Bean。
@Configuration
@ConditionalOnProperty(name = "my.property", havingValue = "true")
public class MyConfig {
// ...
}
13. @ConditionalOnClass
用于条件装配,只有当指定的类存在时才会创建 Bean。
@Configuration
@ConditionalOnClass(MyClass.class)
public class MyConfig {
// ...
}
14. @ConditionalOnMissingClass
用于条件装配,只有当指定的类不存在时才会创建 Bean。
@Configuration
@ConditionalOnMissingClass("com.example.MyClass")
public class MyConfig {
// ...
}
15. @ConditionalOnExpression
用于条件装配,只有当 SpEL 表达式为 true 时才会创建 Bean。
@Configuration
@ConditionalOnExpression("${my.expression}")
public class MyConfig {
// ...
}
16. @ConditionalOnJava
用于条件装配,只有当 Java 版本满足要求时才会创建 Bean。
@Configuration
@ConditionalOnJava(JavaVersion.EIGHT)
public class MyConfig {
// ...
}
17. @ConditionalOnJndi
用于条件装配,只有当 JNDI 存在时才会创建 Bean。
@Configuration
@ConditionalOnJndi("java:comp/env/myBean")
public class MyConfig {
// ...
}
18. @ConditionalOnResource
用于条件装配,只有当指定资源存在时才会创建 Bean。
@Configuration
@ConditionalOnResource(resources = "classpath:my.properties")
public class MyConfig {
// ...
}
19. @ConditionalOnSingleCandidate
用于条件装配,只有当指定类型的 Bean 只有一个候选时才会创建 Bean。
@Configuration
@ConditionalOnSingleCandidate(MyBean.class)
public class MyConfig {
// ...
}
20. @ConditionalOnWebApplication
用于条件装配,只有当应用程序为 Web 应用时才会创建 Bean。
@Configuration
@ConditionalOnWebApplication
public class MyConfig {
// ...
}
21. @ConditionalOnNotWebApplication
用于条件装配,只有当应用程序不是 Web 应用时才会创建 Bean。
@Configuration
@ConditionalOnNotWebApplication
public class MyConfig {
// ...
}
22. @ConditionalOnServletWebServer
用于条件装配,只有当应用程序为 Servlet Web 服务器时才会创建 Bean。
@Configuration
@ConditionalOnServletWebServer
public class MyConfig {
// ...
}
23. @ConditionalOn reactiveWebServer
用于条件装配,只有当应用程序为反应式 Web 服务器时才会创建 Bean。
@Configuration
@ConditionalOn reactiveWebServer
public class MyConfig {
// ...
}
24. @ConditionalOnEnabledEndpoint
用于条件装配,只有当特定端点启用时才会创建 Bean。
@Configuration
@ConditionalOnEnabledEndpoint("myEndpoint")
public class MyConfig {
// ...
}
25. @ConditionalOnDisabledEndpoint
用于条件装配,只有当特定端点禁用时才会创建 Bean。
@Configuration
@ConditionalOnDisabledEndpoint("myEndpoint")
public class MyConfig {
// ...
}
26. @ConditionalOnManagementPort
用于条件装配,只有当管理端口可用时才会创建 Bean。
@Configuration
@ConditionalOnManagementPort
public class MyConfig {
// ...
}
27. @ConditionalOnHttpRequest
用于条件装配,只有当 HTTP 请求满足特定条件时才会创建 Bean。
@Configuration
@ConditionalOnHttpRequest(method = "GET", path = "/myPath")
public class MyConfig {
// ...
}
28. @ConditionalOnAnnotation
用于条件装配,只有当类或方法上存在特定注解时才会创建 Bean。
@Configuration
@ConditionalOnAnnotation(MyAnnotation.class)
public class MyConfig {
// ...
}
29. @ConditionalOnBean annotation
用于条件装配,只有当存在带有特定注解的 Bean 时才会创建 Bean。
@Configuration
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
30. @ConditionalOnMissingBean annotation
用于条件装配,只有当不存在带有特定注解的 Bean 时才会创建 Bean。
@Configuration
@ConditionalOnMissingBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
31. @ConditionalOnSingleCandidate annotation
用于条件装配,只有当带有特定注解的 Bean 只有一个候选时才会创建 Bean。
@Configuration
@ConditionalOnSingleCandidate(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
32. @ConditionalOnExpression annotation
用于条件装配,只有当 SpEL 表达式为 true 且带有特定注解的 Bean 存在时才会创建 Bean。
@Configuration
@ConditionalOnExpression("${my.expression}")
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
33. @ConditionalOnJava annotation
用于条件装配,只有当 Java 版本满足要求且带有特定注解的 Bean 存在时才会创建 Bean。
@Configuration
@ConditionalOnJava(JavaVersion.EIGHT)
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
34. @ConditionalOnJndi annotation
用于条件装配,只有当 JNDI 存在且带有特定注解的 Bean 存在时才会创建 Bean。
@Configuration
@ConditionalOnJndi("java:comp/env/myBean")
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
35. @ConditionalOnResource annotation
用于条件装配,只有当指定资源存在且带有特定注解的 Bean 存在时才会创建 Bean。
@Configuration
@ConditionalOnResource(resources = "classpath:my.properties")
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
36. @ConditionalOnSingleCandidate annotation
用于条件装配,只有当带有特定注解的 Bean 只有一个候选且满足其他条件时才会创建 Bean。
@Configuration
@ConditionalOnSingleCandidate(annotation = MyAnnotation.class)
@ConditionalOnExpression("${my.expression}")
public class MyConfig {
// ...
}
37. @ConditionalOnWebApplication annotation
用于条件装配,只有当应用程序为 Web 应用且带有特定注解的 Bean 存在时才会创建 Bean。
@Configuration
@ConditionalOnWebApplication
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
38. @ConditionalOnNotWebApplication annotation
用于条件装配,只有当应用程序不是 Web 应用且带有特定注解的 Bean 存在时才会创建 Bean。
@Configuration
@ConditionalOnNotWebApplication
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
39. @ConditionalOnServletWebServer annotation
用于条件装配,只有当应用程序为 Servlet Web 服务器且带有特定注解的 Bean 存在时才会创建 Bean。
@Configuration
@ConditionalOnServletWebServer
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
40. @ConditionalOn reactiveWebServer annotation
用于条件装配,只有当应用程序为反应式 Web 服务器且带有特定注解的 Bean 存在时才会创建 Bean。
@Configuration
@ConditionalOn reactiveWebServer
@ConditionalOnBean(annotation = MyAnnotation.class)
public class MyConfig {
// ...
}
总结
Spring Boot 提供了充裕的注解,这些注解可以帮助开发者敏捷构建高质量的应用程序。掌握这些注解,可以大大提升开发效能,让生产力爆表!在实际开发过程中,开发者可以按照项目需求选择合适的注解,以实现更好的代码组织和功能实现。