40 个 SpringBoot 常用注解:让生产力爆表!("SpringBoot必备40个注解:提升开发效率神器!")

原创
ithorizon 7个月前 (10-20) 阅读数 17 #后端开发

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 提供了充裕的注解,这些注解可以帮助开发者敏捷构建高质量的应用程序。掌握这些注解,可以大大提升开发效能,让生产力爆表!在实际开发过程中,开发者可以按照项目需求选择合适的注解,以实现更好的代码组织和功能实现。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门