Spring Boot 常用注解大全:每个程序员必备

news2024/11/16 15:48:27

文章目录

    • 1. `@SpringBootApplication`
    • 2. `@RestController` 和 `@RequestMapping`
    • 3. `@Autowired`
    • 4. `@Service`、`@Repository` 和 `@Component`
    • 5. `@Configuration`
    • 6. `@Value`
    • 7. `@Qualifier`
    • 8. `@ConditionalOnProperty`
    • 9. `@Async`
    • 10. `@Scheduled`
    • 11. `@EnableCaching`
    • 12. `@PathVariable` 和 `@RequestParam`
    • 13. `@RequestBody` 和 `@ResponseBody`
    • 14. `@Valid` 和 `@Validated`
    • 15. `@ExceptionHandler`
    • 16. `@Entity` 和 `@Table`
    • 17. `@OneToMany` 和 `@ManyToOne`
    • 18. `@Transactional`
    • 19. `@Profile`
    • 20. `@EntityScan` 和 `@EnableJpaRepositories`
    • 总结

在这里插入图片描述

🎉欢迎来到架构设计专栏~Spring Boot 常用注解大全:每个程序员必备


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:架构设计
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

在Spring Boot应用程序开发中,注解是无法回避的一部分。Spring Boot提供了许多注解,用于配置应用程序的各个方面,从依赖注入到请求映射,再到数据持久化。这些注解使得开发更加简洁、高效。本文将介绍一些Spring Boot中常用的注解,帮助每个程序员更好地理解和使用它们。

在这里插入图片描述

1. @SpringBootApplication

@SpringBootApplication是一个复合注解,通常放在Spring Boot应用程序的入口类上。它包括以下三个注解的功能:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan。这个注解标志着一个类是Spring Boot应用程序的主配置类,它会自动扫描当前包及其子包中的组件。

在这里插入图片描述

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

2. @RestController@RequestMapping

@RestController用于标志一个类是RESTful风格的控制器,它的方法返回的是JSON数据。@RequestMapping用于定义请求映射。

@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

3. @Autowired

@Autowired用于自动装配Bean,它可以注入一个Bean到另一个Bean中,消除了手动配置Bean的繁琐。

@Service
public class MyService {
    private final MyRepository repository;

    @Autowired
    public MyService(MyRepository repository) {
        this.repository = repository;
    }
}

4. @Service@Repository@Component

这些注解用于定义Spring Bean的类型,分别表示服务、仓库和通用组件。Spring Boot会自动扫描并创建这些Bean。

@Service
public class MyService {
    // ...
}

@Repository
public class MyRepository {
    // ...
}

@Component
public class MyComponent {
    // ...
}

5. @Configuration

@Configuration用于定义一个配置类,通常包含Bean的定义。它可以替代XML配置文件。

@Configuration
public class MyConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

6. @Value

@Value用于注入外部配置属性值。它可以将属性值直接注入到Java字段中。

@Service
public class MyService {
    @Value("${my.property}")
    private String myProperty;
}

7. @Qualifier

当有多个实现同一个接口的Bean时,可以使用@Qualifier注解指定要注入的Bean。

@Service
public class MyService {
    @Autowired
    @Qualifier("myBean1")
    private MyBean myBean;
}

8. @ConditionalOnProperty

@ConditionalOnProperty用于根据属性的值来决定是否创建一个Bean。

@Configuration
@ConditionalOnProperty(name = "my.feature.enabled", havingValue = "true")
public class MyFeatureAutoConfiguration {
    @Bean
    public MyFeature myFeature() {
        return new MyFeature();
    }
}

9. @Async

@Async用于标志一个方法是异步的,Spring Boot会在后台线程中执行它。

@Service
public class MyService {
    @Async
    public CompletableFuture<String> asyncMethod() {
        // 异步操作
    }
}

10. @Scheduled

@Scheduled用于定时任务的配置,它可以标志一个方法定时执行。

@Service
public class MyService {
    @Scheduled(fixedRate = 10000) // 每10秒执行一次
    public void scheduledMethod() {
        // 定时任务
    }
}

11. @EnableCaching

@EnableCaching用于启用Spring Boot的缓存支持,可以在方法上使用@Cacheable@CachePut@CacheEvict等注解来实现缓存。

@Configuration
@EnableCaching
public class MyCacheConfig {
    // 配置缓存
}

12. @PathVariable@RequestParam

@PathVariable用于获取URI中的路径参数,@RequestParam用于获取请求参数。

@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/greet/{name}")
    public String greet(@PathVariable String name, @RequestParam(defaultValue = "Hello") String greeting) {
        return greeting + ", " + name + "!";
    }
}

13. @RequestBody@ResponseBody

@RequestBody用于将请求体中的JSON数据绑定到方法的参数上,@ResponseBody用于将方法的返回值序列化为JSON数据。

@RestController
@RequestMapping("/api")
public class MyController {
    @PostMapping("/create")
    public ResponseEntity<MyObject> create(@RequestBody MyObject object) {
        // 处理请求体中的数据
        return ResponseEntity.ok(object);
    }
}

14. @Valid@Validated

@Valid用于启用方法参数的校验,@Validated用于启用类级别的校验。

@RestController
@RequestMapping("/api")
public class MyController {
    @PostMapping("/create")
    public ResponseEntity<MyObject> create(@Valid @RequestBody MyObject object) {
        // 处理请求体中的数据
        return ResponseEntity.ok(object);
    }
}

在这里插入图片描述

15. @ExceptionHandler

@ExceptionHandler用于定义异常处理方法,当控制器方法抛出指定类型的异常时,Spring Boot会调用这个方法来处理异常。

@RestController
@RequestMapping("/api")
public class MyController {
    @ExceptionHandler(MyException.class)
    public ResponseEntity<String> handleException(MyException ex) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
    }
}

16. @Entity@Table

@Entity用于标志一个JPA实体类,@Table用于指定数据库表的名称。

@Entity
@Table(name = "my_table")
public class MyEntity {
    // 实体类的属性和方法
}

17. @OneToMany@ManyToOne

@OneToMany@ManyToOne用于定义一对多和多对一的关系,通常用于JPA实体类的属性上。

@Entity
public class Author {
    @OneToMany(mappedBy = "author")
    private List<Book> books;
    // ...
}

@Entity
public class Book {
    @ManyToOne
    @JoinColumn(name = "author_id")
    private Author author;
    // ...
}

18. @Transactional

@Transactional用于标志一个方法需要在事务中执行,通常用于服务层方法。

@Service
public class MyService {
    @Transactional
    public void doSomething() {
        // 执行数据库操作
    }
}

19. @Profile

@Profile用于定义不同环境下的配置,可以在application.propertiesapplication.yml中指定spring.profiles.active来选择使用哪个配置。

@Configuration
@Profile("development")
public class DevelopmentConfig {
    // 开发环境配置
}

@Configuration
@Profile("production")
public class ProductionConfig {
    // 生产环境配置
}

20. @EntityScan@EnableJpaRepositories

这两个注解用于配置JPA扫描实体类和仓库接口的包路径。

@SpringBootApplication
@EntityScan("com.example.entities")
@EnableJpaRepositories("com.example.repositories")
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

在这里插入图片描述

总结

Spring Boot提供了丰富的注解来简化应用程序的开发和配置,本文介绍了一些常用的注解,涵盖了依赖注入、控制器、数据持久化、定时任务、缓存、校验、异常处理等方面。掌握这些注解将帮助每个程序员更好地使用Spring Boot来构建高效、可维护的应用程序。希望本文对你有所帮助,让你的Spring Boot开发之路更加顺畅。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1067047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全_黑客(自学)

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01;&#xff01;&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队…

代理IP采集数据:挖掘洞察力的关键工具

在当今数字化时代&#xff0c;数据被视为珍贵的资源&#xff0c;对于企业和组织来说&#xff0c;获取准确、有价值的数据是至关重要的。在数据采集的过程中&#xff0c;代理IP&#xff08;Internet Protocol&#xff09;发挥着关键的作用。本文将介绍代理IP在数据采集中的应用&…

大数据之巅:深入分析数据湖架构的优势

文章目录 什么是数据湖&#xff1f;数据湖的优势1. 弹性扩展性2. 多样化的数据3. 原始数据保存4. 成本效益5. 灵活性和创新6. 基于云的部署 数据湖的挑战1. 数据治理2. 查询性能3. 安全性4. 数据发现 结论 &#x1f389;欢迎来到AIGC人工智能专栏~大数据之巅&#xff1a;深入分…

[补题记录] Atcoder Beginner Contest 298(E)

URL&#xff1a;https://atcoder.jp/contests/abc298 目录 E Problem/题意 Thought/思路 Code/代码 E Problem/题意 A、B 轮流投色子&#xff0c;A 投出 [1, P] 点数的概率相等&#xff0c;B投出 [1, Q] 点数的概率相等。 现有 N 个点&#xff0c;初始时&#xff0c;A 位…

docker部署Vaultwarden密码共享管理系统

Vaultwarden是一个开源的密码管理器&#xff0c;它是Bitwarden密码管理器的自托管版本。它提供了类似于Bitwarden的功能&#xff0c;允许用户安全地存储和管理密码、敏感数据和身份信息。 Vaultwarden的主要特点包括&#xff1a; 1. 安全的数据存储&#xff1a;Vaultwarden使…

C++递归函数

在本文中&#xff0c;您将学习创建递归函数。调用自身的函数。 调用自身的函数称为递归函数。并且&#xff0c;这种技术称为递归。 递归在C 中如何工作&#xff1f; void recurse() {... .. ...recurse();... .. ... }int main() {... .. ...recurse();... .. ... } 下图显…

在模拟器上安装magisk实现Charles抓https包(一)

本机环境&#xff1a;win7 64位&#xff0c;Python3.8.10&#xff0c;逍遥模拟器版本9.0.6&#xff0c;安卓版本9&#xff08;手机里的设置-系统-关于平板电脑-Android版本&#xff09;。 首先下载magisk&#xff0c;下载地址为Releases topjohnwu/Magisk GitHub&#xff0c…

Combination Lock

题目描述 新学期开学&#xff0c;您又回到了学校。您需要记住如何操作储物柜上的组合锁。一个组合锁的常见设计如图 1 所示。组合锁有一个圆形刻度表盘&#xff0c;在表盘上&#xff0c;有 40 个编号为从 0 至 39 的刻度&#xff0c;正上方有一个刻度指针。一个组合由这些数字…

ggkegg | 用这个神包玩转kegg数据库吧!~(一)

1写在前面 好久没更了&#xff0c;实在是太忙了&#xff0c;值班真的是根本不不睡觉啊&#xff0c;一忙一整天&#xff0c;忙到怀疑人生。&#x1f62d; 最近看到比较&#x1f525;的就是ggkegg包&#xff0c;感觉使用起来还是有一定难度的。&#x1fae0; 和大家分享一下使用教…

波浪input输入框文字边框动画

一个input输入框的小动画,大家可以按需引入和修改 input的动画表现为,文字提示波浪动画 效果图如下 源码如下 tips: 有不懂的可以在评论区问博主 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name&q…

mac有些软件无法删除,CleanMyMac X 4.14.3轻松帮你解决

作为Mac用户&#xff0c;你会发现mac有些软件无法删除&#xff0c;这会导致不必要的空间浪费&#xff0c;也可能会干扰你的系统稳定性。但是不用担心&#xff0c;小编会告诉你遇到这种情况应该怎么办&#xff1f; mac有些软件无法删除 首先&#xff0c;让我们一起探究一下背后…

轻量级MobileSAM:比FastSAM快4倍,处理一张图像仅需10ms(附源代码)

论文地址&#xff1a;https://arxiv.org/pdf/2306.14289.pdf 代码地址&#xff1a;https://github.com/ChaoningZhang/MobileSAM 一、概要简介 SAM是一种prompt-guided的视觉基础模型&#xff0c;用于从其背景中剪切出感兴趣的对象。自Meta研究团队发布SA项目以来&#xff0c…

​孤网双机并联逆变器下垂控制策略(包括仿真模型,功率计算模块、下垂控制模块、电压电流双环控制模块​)(Simulink仿真)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

土木硕设计院在职转码上岸

一、个人介绍 双非土木硕&#xff0c;98年&#xff0c;目前在北京&#xff0c;职位为前端开发工程师&#xff0c;设计院在职期间自学转码上岸&#x1f33f; 二、背景 本人于19年开始土木研究生生涯&#xff0c;研二期间去地产实习近半年(碧桂园和世茂&#xff0c;这两家的地产…

java api System类

currentTimeMills() package daysreplace;public class Test {public static void main(String[] args) {long start System.currentTimeMillis();// System.out.println(start"毫秒");for (int i 0; i < 100; i) {System.out.println("计算执行100次输出…

迭代合成中小量液体样品静态法饱和蒸气压高精度自动测量解决方案

摘要&#xff1a;针对目前静态法液体饱和蒸气压测量中存在测量精度差、自动化程度低以及无法进行微量液体样品测试的问题&#xff0c;本文提出了微量样品蒸气压高精度自动测量解决方案。解决方案基于静态法原理&#xff0c;采用了低漏率的测试装置和高精度电容真空计&#xff0…

MM-Camera架构-Open 流程分析

文章目录 1 camera open总结2 Camera Open 代码流程分析2.1 Java 层 Camera Class 使用介绍2.2 Frameworks 层 Camera.java 分析2.2.1 \[JNI] CameraService初始化 native\_setup( ) —> android\_hardware\_Camera\_native\_setup( )2.2.2 \[AIDL] interface ICameraServic…

【Java 进阶篇】HTML文本标签详解

HTML&#xff08;Hypertext Markup Language&#xff09;是构建Web页面的基础。在HTML中&#xff0c;文本标签用于定义和呈现文本内容。本文将详细介绍HTML中的一些常用文本标签&#xff0c;包括段落、标题、文本样式等&#xff0c;适用于初学者&#xff0c;让您了解如何创建和…

可视化大屏怎么打破数据孤岛,整合分析数据?

在今天这个数据驱动的时代&#xff0c;企业面临着海量数据带来的挑战。其中最突出的问题之一就是数据孤岛现象&#xff0c;它限制了数据的全面利用和价值挖掘。但这一问题在奥威BI系统前都不算什么。奥威BI系统的可视化大屏不仅可对接多业务系统数据&#xff0c;更可智能整合、…

力扣-404.左叶子之和

Idea attention&#xff1a;先看清楚题目&#xff0c;题目说的是左叶子结点&#xff0c;不是左结点【泣不成声】 遇到像这种二叉树类型的题目呢&#xff0c;我们一般还是选择dfs&#xff0c;然后类似于前序遍历的方式加上判断条件即可 AC Code class Solution { public:void d…