Spring Boot 常用注解

server/2024/10/22 9:34:08/

1. 启动类注解

  • @SpringBootApplication:

    • 它是 Spring Boot 的核心注解,包含了 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 三个注解。
    • @SpringBootConfiguration:标注当前类为配置类,类似于 Spring 的 @Configuration 注解,用于配置 Spring Boot 应用的各种设置。
    • @EnableAutoConfiguration:开启 Spring Boot 的自动配置功能,根据项目依赖自动配置相关的 Bean。比如,如果项目依赖了 spring-boot-starter-web,它会自动配置 Spring MVC、Tomcat 等组件。
    • @ComponentScan: 扫描指定的包路径,寻找并注册相关的 Bean,比如 Controller、Service 等。

    示例:

    java">@SpringBootApplication
    public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
    }
    

2. 配置类注解

  • @Configuration:

    • 标注当前类为配置类,用于定义 Bean 和其他配置信息。
    • 可以用 @Bean 注解定义一个 Bean,并返回 Bean 实例。

    示例:

    java">@Configuration
    public class MyConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
    }
    
  • @ConfigurationProperties:

    • 将配置文件中的属性映射到 Java Bean 上,方便管理配置信息。
    • 可以使用 @Value 注解注入单个属性,但 @ConfigurationProperties 可以方便地将整个配置文件映射到 Bean 上。

    示例:

    java">@ConfigurationProperties(prefix = "my.app")
    public class MyAppProperties {private String name;private int port;// getter and setter
    }@Configuration
    public class MyConfig {@Beanpublic MyAppProperties myAppProperties() {return new MyAppProperties();}
    }
    

    application.properties 中配置:

    my.app.name=My Application
    my.app.port=8080
    
  • @EnableConfigurationProperties:

    • 启用 @ConfigurationProperties 注解,允许将配置属性注入到 Bean 中。

    示例:

    java">@Configuration
    @EnableConfigurationProperties(MyAppProperties.class)
    public class MyConfig {// ...
    }
    
  • @PropertySource:

    • 指定配置文件的位置,可以加载多个配置文件。

    示例:

    java">@Configuration
    @PropertySource("classpath:my-config.properties")
    public class MyConfig {// ...
    }
    

3. 控制器层注解

  • @RestController:

    • 标注当前类为一个 REST 控制器,返回 JSON 格式的数据。
  • @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:

    • 用于处理不同类型的 HTTP 请求。
    • 类似于 Spring MVC 的 @RequestMapping 注解,但更加简洁。

    示例:

    java">@RestController
    public class UserController {@GetMapping("/users/{id}")public User getUser(@PathVariable Long id) {// ...}@PostMapping("/users")public User createUser(@RequestBody User user) {// ...}
    }
    
  • @PathVariable、@RequestParam、@RequestBody:

    • 用于获取请求参数。
    • @PathVariable 用于获取 URL 中的路径变量。
    • @RequestParam 用于获取 URL 中的查询参数。
    • @RequestBody 用于获取请求体内容。
  • @ResponseBody:

    • 将返回值转换成 JSON 格式的数据,直接返回给客户端。
    • @RestController 中默认使用 @ResponseBody,因此不需要显式声明。

4. 服务层注解

  • @Service:

    • 标注当前类为一个服务层类,用于定义业务逻辑。
  • @Transactional:

    • 开启事务管理,确保多个操作的原子性。

    示例:

    java">@Service
    public class UserService {@Transactionalpublic void updateUser(User user) {// ...}
    }
    

5. 实体类注解

  • @Entity:

    • 标注当前类为一个实体类,用于映射数据库中的表。
  • @Table:

    • 指定实体类映射的数据库表名。
  • @Id:

    • 标注主键字段。
  • @Column:

    • 指定字段名和数据类型。
  • @GeneratedValue:

    • 指定主键生成策略。

    示例:

    java">@Entity
    @Table(name = "users")
    public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(name = "name")private String name;// ...
    }
    

6. 其他常用注解

  • @Autowired:

    • 自动注入依赖,类似于 Spring 的 @Resource 注解。
    • 用于注入其他 Bean。

    示例:

    java">@Service
    public class UserService {@Autowiredprivate UserRepository userRepository;// ...
    }
    
  • @Component:

    • 标注当前类为一个组件,可以被 Spring 容器管理。

    示例:

    java">@Component
    public class MyComponent {// ...
    }
    
  • @Qualifier:

    • 用于解决多个 Bean 冲突,指定要注入的 Bean 的名称。

    示例:

    java">@Service
    public class UserService {@Autowired@Qualifier("myUserRepository")private UserRepository userRepository;// ...
    }
    
  • @Value:

    • 注入配置文件中的属性值。

    示例:

    java">@Component
    public class MyComponent {@Value("${my.app.name}")private String appName;// ...
    }
    
  • @Bean:

    • @Configuration 类中,定义一个 Bean。

    示例:

    java">@Configuration
    public class MyConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
    }
    
  • @Import:

    • 导入其他配置类。

    示例:

    java">@SpringBootApplication
    @Import(MyConfig.class)
    public class MyApplication {// ...
    }
    

7. Spring Data JPA 注解

  • @Repository:

    • 标注当前类为一个数据访问层类。
  • @Query:

    • 自定义 SQL 查询语句。
  • @Modifying:

    • 标注更新操作。

    示例:

    java">@Repository
    public interface UserRepository extends JpaRepository<User, Long> {@Query("SELECT u FROM User u WHERE u.name = :name")User findByName(@Param("name") String name);@Modifying@Query("UPDATE User u SET u.name = :newName WHERE u.id = :id")void updateName(@Param("id") Long id, @Param("newName") String newName);
    }
    

8. Spring Security 注解

  • @EnableWebSecurity:

    • 启用 Spring Security 的安全配置。
  • @PreAuthorize:

    • 授权验证,例如 @PreAuthorize("hasRole('ADMIN')")
  • @Secured:

    • 授权验证,类似于 @PreAuthorize

    示例:

    java">@PreAuthorize("hasRole('ADMIN')")
    @GetMapping("/admin")
    public String adminPage() {// ...
    }
    

9. Spring Cloud 注解

  • @EnableEurekaServer:

    • 启用 Eureka Server。
  • @EnableDiscoveryClient:

    • 启用服务注册和发现。
  • @FeignClient:

    • 声明一个 Feign 客户端。
  • @HystrixCommand:

    • 启用 Hystrix 熔断机制。

    示例:

    java">@FeignClient(name = "user-service")
    public interface UserServiceClient {@GetMapping("/users/{id}")User getUser(@PathVariable Long id);
    }
    

http://www.ppmy.cn/server/48256.html

相关文章

使用JMeter软件压测接口配置说明

1、下载完该软件https://blog.csdn.net/wust_lh/article/details/86095924 2.点击bin文件中jmeter.bat脚本https://blog.csdn.net/wust_lh/article/details/86095924 3.官网地址https://jmeter.apache.org/download_jmeter.cgi 通过 【Options】->【Choose Language】变更为…

使 C# 定义的接口能够被 Java 客户端调用

要使 C# 定义的接口能够被 Java 客户端调用&#xff0c;需要确保你的 C# 应用程序能够通过 HTTP 请求对外暴露 API&#xff0c;并且正确配置服务器和项目设置。以下是具体步骤&#xff1a; 1. 确保 C# API 可供访问 确认 C# API 是可通过 HTTP 访问的&#xff0c;通常使用 ASP…

Java语言+前端框架html+Thymeleaf +后端框架springboot开发的UWB智能定位系统源码 UWB三维可视化人员定位系统源码

Java语言前端框架htmlThymeleaf 后端框架springboot开发的UWB智能定位系统源码 UWB三维可视化人员定位系统源码 UWB定位系统基于B/S架构的软件和嵌入式硬件都具有很好的扩展性和兼容性&#xff0c;可以与其他系统接口&#xff08;比如&#xff1a;围界、AB门、高压电网、报警、…

2024全国高考作文题解读(Chat GPT 4.0版本)

新课标I卷 阅读下面的材料&#xff0c;根据要求写作。&#xff08;60分&#xff09; 随着互联网的普及、人工智能的应用&#xff0c;越来越多的问题能很快得到答案。那么&#xff0c;我们的问题是否会越来越少&#xff1f; 以上材料引发了你怎样的联想和思考&#xff1f;请写…

大数据之flink与hive

其实吧我不太想写flink&#xff0c;因为线上经验确实不多&#xff0c;这也是我需要补的地方&#xff0c;没有条件创造条件&#xff0c;先来一篇吧 flink&#xff1a; 高性能 低延迟 流批一体的分布式计算框架 基于事件时间 对实时数据精准处理 快速响应 支持批处理&#xff0c…

rust clap库(命令行解析)

1 命令行解析(clap) ​ clap是rust中流行的命令行解析工具&#xff0c;有clap Derive和Builder两种命令行构建方式。 CLI概述 CLI&#xff08;Commang Line Interface&#xff0c;命令行界面&#xff09;始终允许用户通过文本命令与计算机程序活操作系统进行交互的接口。与图…

DevExpress 控件和库

UI控件和组件 DevExpress WinForms包括以下Windows窗体库和控件&#xff1a; Grids and Editors Data Grid Tree List Vertical Grid Property Grid Gantt Control Data Editors and Simple Controls Office-inspired Ribbon, Bars and Menu Rich Text Editor Scheduler S…

React中实现大模型的打字机效果

React 想实现一个打字机的效果&#xff0c;类似千问、Kimi 返回的效果。调用大模型时&#xff0c;模型的回答通常是流式输出的&#xff0c;如果等到模型所有的回答全部完成之后再展示给最终用户&#xff0c;交互效果不好&#xff0c;因为模型计算推理时间比较长。本文将采用原生…