Spring boot注解介绍

1. Spring 核心注解

Spring Boot 是基于 Spring 框架的,所以核心注解依然适用。

✅ 常见核心注解

  • @Component
    表示一个通用组件,Spring 会自动扫描并注入到容器中。

    @Component
    public class MyComponent {public void sayHello() {System.out.println("Hello from Component!");}
    }
    
  • @Service
    表示业务逻辑层的组件(语义化,更适合 Service 层)。

    @Service
    public class UserService {public String getUser() {return "User";}
    }
    
  • @Repository
    表示持久层的组件(DAO 层),会额外处理数据库相关异常。

    @Repository
    public class UserRepository {public void saveUser() {System.out.println("User saved");}
    }
    
  • @Controller / @RestController

    • @Controller:返回视图(模板引擎,如 Thymeleaf)。

    • @RestController:等价于 @Controller + @ResponseBody,返回 JSON 数据。

    @RestController
    @RequestMapping("/api")
    public class UserController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
    }
    
  • @Autowired
    自动注入 Bean(默认按类型匹配)。

    @RestController
    public class HelloController {@Autowiredprivate UserService userService;
    }
    

2. Spring Boot 特有注解

✅ 启动 & 配置类

  • @SpringBootApplication
    Spring Boot 的核心启动注解,相当于:

    • @Configuration

    • @EnableAutoConfiguration

    • @ComponentScan

    @SpringBootApplication
    public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
    }
    
  • @EnableAutoConfiguration
    开启自动配置(Spring Boot 会根据依赖自动配置 Bean)。

  • @ConfigurationProperties
    将配置文件(application.yml / application.properties)绑定到 Java 类上。

    @Component
    @ConfigurationProperties(prefix = "app")
    public class AppProperties {private String name;private String version;// getter/setter
    }
    
  • @Value
    直接注入配置属性。

    @Value("${app.name}")
    private String appName;
    

3. Web 注解

✅ 请求映射

  • @RequestMapping:定义路径映射,可用于类和方法。

  • @GetMapping / @PostMapping / @PutMapping / @DeleteMapping:更具体的 HTTP 方法注解。

    @RestController
    @RequestMapping("/users")
    public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable Long id) {return "User " + id;}
    }
    

✅ 参数绑定

  • @PathVariable:获取路径参数。

  • @RequestParam:获取请求参数(?key=value)。

  • @RequestBody:绑定请求体 JSON 到对象。

  • @RequestHeader:获取请求头。

    @PostMapping("/create")
    public String createUser(@RequestBody User user,@RequestHeader("token") String token) {return "User created: " + user.getName() + ", token=" + token;
    }
    

4. 数据验证注解(JSR-303)

常用于参数校验,结合 @Valid@Validated 使用。

  • @NotNull:不能为空

  • @NotBlank:字符串不能为空

  • @Size(min, max):限制长度

  • @Email:校验邮箱

  • @Pattern:正则校验

    public class UserDTO {@NotBlank(message = "用户名不能为空")private String username;@Email(message = "邮箱格式不正确")private String email;
    }@PostMapping("/register")
    public String register(@Valid @RequestBody UserDTO user) {return "注册成功";
    }
    

5. 事务 & 异步

  • @Transactional:开启事务管理。

    @Service
    public class OrderService {@Transactionalpublic void createOrder() {// 数据库操作}
    }
    
  • @Async:异步执行方法。

    @Service
    public class EmailService {@Asyncpublic void sendEmail(String to) {System.out.println("Sending email to " + to);}
    }
    

6. 测试相关注解

  • @SpringBootTest:启动完整 Spring Boot 上下文。

  • @WebMvcTest:仅启动 Web 层。

  • @MockBean:模拟一个 Bean(用于单元测试)。

    @SpringBootTest
    class UserServiceTest {@Autowiredprivate UserService userService;
    }
    

7. 条件注解(高级用法)

Spring Boot 提供条件装配,按环境决定是否加载 Bean。

  • @ConditionalOnProperty:配置属性满足条件时加载。

  • @ConditionalOnMissingBean:当容器中没有某个 Bean 时才加载。

  • @Profile:指定环境下生效(如 dev, prod)。

    @Service
    @Profile("dev")
    public class DevUserService implements UserService {}@Service
    @Profile("prod")
    public class ProdUserService implements UserService {}
    

8. 其他常用注解

  • @Bean:在 @Configuration 类中定义 Bean。

  • @Primary:多个 Bean 时,标记优先注入。

  • @Qualifier:按名称指定 Bean。

  • @Order:指定加载顺序。


👉 总结:

  • 核心注解(@Component, @Service, @Controller…)用于 Bean 管理。

  • Spring Boot 特有注解(@SpringBootApplication, @ConfigurationProperties…)用于简化配置。

  • Web 注解 处理请求映射和参数绑定。

  • 事务、异步、测试、条件注解 提供更高级的控制。

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

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

相关文章

撤销回退 情况⼆:已经 add ,但没有 commit

撤销回退 情况⼆:已经 add ,但没有 commit add 后还是保存到了暂存区呢?怎么撤销呢? 1 # 向ReadMe中新增⼀⾏代码 2 hyb139-159-150-152:~/gitcode$ vim ReadMe 3 hyb139-159-150-152:~/gitcode$ cat ReadMe 4 hello bit 5 hell…

【Linux笔记】命令行与vim基础

一、Linux命令行基础 1. 基本语法命令空格参数(可写可不写)空格文件,文件夹(可写可不写)ls列出文件夹中的内容/opt 根目录下的opt文件夹ls-a all显示出所有文件以及隐藏文件/optls-a如果不写则输出一个点,当…

Redis 的整数集合:像分类收纳盒一样的整数专属存储

目录 一、先懂定位:为什么需要整数集合?(衔接哈希表) 二、整数集合的结构:像 “贴了规格标签的收纳盒” 1. encoding:收纳盒的 “规格标签”(核心:决定格子大小) 2. …

Linux 进程状态 — 僵尸进程

🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录进…

React 中 key 的作用

React 中 key 的作用是什么? Date: August 31, 2025 Area: 原理key 概念 在 React 中,key 用于识别哪些元素是变化、添加或删除的。 在列表渲染中,key 尤其重要,因为它能提高渲染性能和确保组件状态的一致性。key 的作用 1&#x…

wpf之附加属性

前言 附加属性是 WPF 中一个非常强大和独特的概念。简单来说,它允许一个对象为另一个在其本身类定义中未定义的属性赋值。 1、定义附加属性 定义一个Watermark的附加属性,该属性的作用是将TextBox的附加属性改变时,TextBox的字体颜色改成灰…

深入浅出 RabbitMQ-消息可靠性投递

大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注实战代码系列最新文章😉C实现图书管理系统(Qt C GUI界面版)SpringBoot实战系列🐷【SpringBoot实战系列】SpringBoot3.X 整合 Mi…

数字化时代,中小企业如何落地数字化转型

大数据时代,各行各业的行业龙头和大型集团都已经开始了数据管理,让数据成为数据资产。但是在我国,中小企业的数量巨大,很多管理者忽视了这一点,今天我们就来聊一聊中小企业的数字化转型。中小企业需要数字化转型首先要…

Unity笔记(九)——画线功能Linerenderer、范围检测、射线检测

写在前面:写本系列(自用)的目的是回顾已经学过的知识、记录新学习的知识或是记录心得理解,方便自己以后快速复习,减少遗忘。这里只记录代码知识。十一、画线功能Linerenderer画线功能Linerenderer是Unity提供的画线脚本,创建一个空…

刷题记录(8)string类操作使用

一、仅反转字母 917. 仅仅反转字母 - 力扣(LeetCode) 简单来说输入字符串,要求你返回所有仅字母位置反转后的字符串。 简单看一个样例加深理解: 前后互换,我想思路基本很明显了,双指针,或者说…

用好AI,从提示词工程到上下文工程

前言 随着 AI 大模型的爆发,提示词工程(prompt engineering ) 一度是用户应用 AI ,发挥 AI 能力最重要、也最应该掌握的技术。 但现在,在 “提示词工程”的基础上,一个更宽泛也更强力的演化概念被提出,也就是本文我们要介绍的 “上下文工程(Context Engineering)” …

计算机Python毕业设计推荐:基于Django+Vue用户评论挖掘旅游系统

精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、项目介绍二、…

⸢ 肆 ⸥ ⤳ 默认安全:安全建设方案 ➭ a.信息安全基线

👍点「赞」📌收「藏」👀关「注」💬评「论」 在金融科技深度融合的背景下,信息安全已从单纯的技术攻防扩展至架构、合规、流程与创新的系统工程。作为一名从业十多年的老兵,将系统阐述数字银行安全体系的建设…

如何用AI视频增强清晰度软件解决画质模糊问题

在视频制作和分享过程中,画质模糊、细节丢失等问题常常影响观看体验。无论是老旧视频的修复还是低分辨率素材的优化,清晰度提升都成为用户关注的重点。借助专业的AI技术,这些问题可以得到有效解决。目前市面上存在多种解决方案,能…

Linux92 shell:倒计时,用户分类

问题 while IFS read -r line;doootweb kk]# tail -6 /etc/passwd user1r4:x:1040:1040::/home/user1r4:/bin/bash useros20:x:1041:1041::/home/useros20:/bin/bash useros21:x:1042:1042::/home/useros21:/bin/bash useros22:x:1043:1043::/home/useros22:/bin/bash useros23…

LinkedList源码解析

1. 数据结构设计 (1) 节点结构 LinkedList 的核心是双向链表节点 Node&#xff1a; private static class Node<E> {E item; // 存储的元素Node<E> next; // 后继节点Node<E> prev; // 前驱节点Node(Node<E> prev, E element, Node<E&g…

语雀批量导出知识库

使用工具&#xff1a;yuque-dl 参考文档&#xff1a; GitHub - gxr404/yuque-dl: yuque 语雀知识库下载 Yuque-DL&#xff1a;一款强大的语雀资源下载工具_语雀文档怎么下载-CSDN博客

电子电气架构 --- 当前企业EEA现状(下)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

flink中的窗口的介绍

本文重点 无界流会源源不断的产生数据,有的时候我们需要把无界流进行切分成一段一段的有界数据,把一段内的所有数据看成一个整体进行聚合计算,这是实现无界流转成有界流的方式之一。 为什么需要窗口 数据是源源不断产生的,我们可能只关心某个周期内的统计结果。比如电费…

自建es 通过Flink同步mysql数据 Docker Compose

资源es:7.18 kibana:7.18 flink:1.17.2目录mkdir -p /usr/project/flink/{conf,job,logs} chmod -R 777 /usr/project/flink #资源情况 mysql8.0 Elasticsearch7.18 自建# 目录结构 /usr/project/flink/ /usr/project/flink/ ├── conf/ │ ├── flink-conf.yaml │ └…