当前位置: 首页 > news >正文

面基Spring Boot项目中实用注解一

在Spring Boot项目中,实用注解根据功能可以分为多个类别。以下是常见的注解分类、示例说明及对比分析:


1. 核心配置注解

@SpringBootApplication
  • 作用:标记主启动类,组合了@Configuration@EnableAutoConfiguration@ComponentScan。 它用于标识Spring Boot应用程序的入口类,可以简化Spring应用程序的配置和启动过程。

  • 示例: 例子中,@SpringBootApplication注解被用于MyApplication类上,标识了这个类是Spring Boot应用程序的入口。

    @SpringBootApplication
    public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
    }
  • 对比:相比手动组合多个注解,@SpringBootApplication简化了启动类配置。


2. 依赖注入与Bean管理

@Autowired
  • 作用:自动注入Bean,默认按类型匹配。

  • 示例

    @Service
    public class UserService {@Autowiredprivate UserRepository userRepository;
    }

  • 对比:与@Resource(按名称注入)相比,@Autowired更灵活,支持@Qualifier细化匹配。(后期补充 @Qualifier 实用细节,未完成。。

@Component vs @Service vs @Repository
  • 共同点:均用于声明Bean。

  • 区别

    • @Component:通用注解。

    • @Service:标记业务层,强调事务性。

    • @Repository:标记数据层,自动转换数据访问异常。

  • 示例

    @Repository
    public class UserRepositoryImpl implements UserRepository {}


3. Web MVC注解

@RestController vs @Controller
  • @RestController:组合了@Controller@ResponseBody,直接返回JSON。 

    • 与@Controller类似,但@RestController会自动将返回值转换为JSON格式。它用于标注一个类,表示这个类是一个RESTful风格的控制器,可以处理HTTP请求并返回JSON/XML格式的响应。

  • @Controller:需配合@ResponseBody返回数据。

  • 示例

    @RestController
    public class UserController {@GetMapping("/users")public List<User> getUsers() {return userService.findAll();}
    }

         在这个例子中,@RestController注解被用于UserController类上,使得这个类成为了一个RESTful风格的控制器。@RequestMapping注解用于指定请求URL和处理方法之间的关系。

@GetMapping vs @RequestMapping
  • @GetMapping:简化版@RequestMapping(method = RequestMethod.GET)。    @RequestMapping用于映射请求URL和处理方法。它是Spring MVC框架中的一个核心注解,可以用于类级别和方法级别,指定请求URL和HTTP方法(GET、POST、PUT、DELETE等)。@GetMapping、@PostMapping等是@RequestMapping的派生注解,用于简化特定HTTP方法的映射。

  • 示例

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) { ... }

    示例二:

    @RestController
    @RequestMapping("/api")
    public class UserController {@GetMapping("/users")public List<User> getUsers() {// 获取用户列表}@PostMapping("/users")public void createUser(@RequestBody User user) {// 创建新用户}
    }

    在这个例子中,@GetMapping和@PostMapping注解分别用于映射HTTP GET和POST请求到对应的方法上。


4. 数据访问与事务

@Entity & @Table
  • 作用:JPA实体映射。

  • 示例

    @Entity
    @Table(name = "users")
    public class User { ... }

@Transactional
  • 作用:声明式事务管理。

  • 对比:与编程式事务(手动管理)相比,代码更简洁。

  • 示例

    @Transactional
    public void updateUser(User user) {userRepository.save(user);
    }


5. 配置与属性绑定

@ConfigurationProperties
  • 作用:将配置文件属性绑定到Bean。

  • 对比:比@Value更高效,支持批量注入。

  • 示例

    @ConfigurationProperties(prefix = "datasource")
    public class DataSourceConfig {private String url;private String username;// getters & setters
    }


6. 切面编程(AOP)

@Aspect & @Around
  • 作用:定义切面和环绕通知。

  • 示例

    @Aspect
    @Component
    public class LoggingAspect {@Around("execution(* com.example.service.*.*(..))")public Object logMethod(ProceedingJoinPoint joinPoint) throws Throwable {// 记录日志逻辑return joinPoint.proceed();}
    }


7. 测试相关

@SpringBootTest vs @WebMvcTest
  • @SpringBootTest:全量集成测试,加载完整上下文。

  • @WebMvcTest:仅加载Web层上下文,轻量级。

  • 示例

    @SpringBootTest
    class UserServiceIntegrationTest { ... }@WebMvcTest(UserController.class)
    class UserControllerTest { ... }


对比总结

注解典型场景替代方案优势
@SpringBootApplication主启动类配置手动组合多个注解简化配置,减少冗余代码
@RestController返回JSON的控制器@Controller + @ResponseBody代码更简洁
@Autowired依赖注入XML配置或@Resource按类型自动匹配,灵活
@Transactional声明式事务编程式事务(如TransactionTemplate代码侵入性低,易于维护
@GetMapping定义GET请求路由@RequestMapping(method=GET)可读性更高,语法简洁

总结

Spring Boot注解通过约定大于配置的理念,显著简化了开发。合理选择注解(如用@RestController替代传统@Controller)能提升代码可读性和维护性,而对比不同注解(如@Autowired@Resource)有助于理解Spring的设计哲学。实际开发中应根据场景选择最合适的注解。

注意:

        spring项目常用注解-URL: 地基spring注解部分一-CSDN博客

(抱歉,最近在面试,粗糙了些。)

(望各位潘安、各位子健/各位彦祖、于晏不吝赐教!多多指正!🙏)

相关文章:

面基Spring Boot项目中实用注解一

在Spring Boot项目中&#xff0c;实用注解根据功能可以分为多个类别。以下是常见的注解分类、示例说明及对比分析&#xff1a; 1. 核心配置注解 SpringBootApplication 作用&#xff1a;标记主启动类&#xff0c;组合了Configuration、EnableAutoConfiguration和ComponentScan…...

【数据库维护】Clickhouse数据库维护关键系统表相关指标说明,支撑定位慢SQL及多实例场景下分析各实例运行情况

背景 当前使用环境上以Docker容器化部署Clickhouse服务8个实例&#xff0c;但在实际运行过程中&#xff0c;发现8个实例内存负载不均衡&#xff0c;ck-0实例在固定时间段内存会直线上升&#xff0c;直至服务报错memory exceeded max memory limit。 为排查ck-0节点内存直线上升…...

委托构造函数与继承构造函数

委托构造函数 允许同一类中的构造函数调用另一个构造函数&#xff0c;以复用初始化逻辑。 委托构造函数不能同时初始化成员变量&#xff0c;只能委托给其他构造函数。 避免循环委托&#xff08;如构造函数A委托给B&#xff0c;B又委托给A&#xff09;。 class MyClass { pu…...

DeepSeek操作Excel,实现图表自动化生成

案例 让DeepSeek操作Excel&#xff0c;实现图表自动化生成。我们只要用自然语言输入我们的需求&#xff08;根据哪块单元格区域做什么图表&#xff09;&#xff0c;就可以直接在Excel中自动生成图表。 操作主界面和图表效果 设置接入方式 这里提供了多种接入方式将DeepSeek接…...

3.5 企业级AI Agent运维体系构建:从容器化部署到智能监控的工业级实践指南

企业级AI Agent运维体系构建:从容器化部署到智能监控的工业级实践指南 引言:AI时代运维的范式革新 Gartner研究指出,AI Agent系统的运维复杂度是传统应用的3.2倍,但采用云原生架构可使故障恢复时间缩短82%。本文以GitHub Sentinel、LanguageMentor等企业级案例为蓝本,揭…...

基于51单片机的定时器实现LED闪烁控制(CT107D)

引言 在嵌入式开发中&#xff0c;定时器是一个非常重要的外设&#xff0c;它可以用于实现精确的时间控制。本文将介绍如何在CT107D单片机综合训练平台上&#xff0c;利用51单片机的定时器T0实现LED灯的定时闪烁控制。具体功能如下&#xff1a; L1指示灯&#xff1a;每隔1秒闪烁…...

【java】作业1

1.需求&#xff1a;&#xff08;1&#xff09;机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、原价、月份和头等舱或经济舱&#xff1b;&#xff08;2&#xff09;按照如下规则计算机票价格&#xff1a;旺季&#xff08;5-10月&#xff09;头等舱9折&#xff0c;经济…...

2025有哪些关键词优化工具好用

越来越多的企业和个人开始意识到搜索引擎优化&#xff08;SEO&#xff09;对于网站曝光和业务增长的重要性。在SEO优化的过程中&#xff0c;关键词优化占据着至关重要的地位。关键词是用户在搜索引擎中输入的词语&#xff0c;优化关键词有助于提高网站在搜索结果中的排名&#…...

【WPSOffice】汇总

写在前面 PPT篇 幻灯片母版 通过母版功能统一幻灯片的样式、字体、颜色等&#xff0c;提高整体一致性。 统一设置模板样式 字体安装 查找到字体并安装。 在WPS PPT&#xff08;WPS演示&#xff09;中&#xff0c;以下是最常用的十个功能&#xff0c;能够帮助用户高效制作…...

海康摄像头IPV6模式,手动,自动,路由公告

海康摄像头DS-2DC7220IW-A 网络设置中的IPv6配置选项。IPv6是互联网协议&#xff08;IP&#xff09;的第六版&#xff0c;用于替代IPv4&#xff0c;提供更多的IP地址和改进的网络功能。图片中的选项允许用户选择如何配置设备的IPv6网络连接&#xff1a; 手动&#xff1a;用户可…...

Transformer(3): Add Norm

文章目录 残差连接层归一化作用和其它归一化的比较 dropout基本思想实现方式 残差连接 目的是解决深层网络中梯度消失的问题。 解决方法是进行跳跃连接&#xff0c;即多出一条输出链路&#xff0c;将输入X直接接到输出层上。 公式为 F(X) X。 这样每一层求导的时候至少能够…...

SpringBoot多数据源实践:基于场景的构建、实现和事务一体化研究

1. 多数据源应用场景剖析 1.1 业务驱动的多数据源需求 数据量与业务复杂度引发的分库分表&#xff1a;在现代企业级应用中&#xff0c;随着业务的不断拓展和用户量的持续增长&#xff0c;数据量呈爆炸式增长。例如&#xff0c;在大型电商平台中&#xff0c;用户数据、订单数据…...

SOCKET建立简单的tcp服务端与客户端通信

socket是什么 socket可以使两台机子建立连接&#xff0c;就像连接风扇与电源的插座一样&#xff0c;socket可以使服务端与客户端建立连接&#xff0c;服务端就像供电厂&#xff0c;而客户端就像用电器&#xff0c;而socket就是连接二者的插座。 建立简单的连接 如果我们想在客…...

C语言-章节 1:变量与数据类型 ——「未初始化的诅咒」

在那神秘且广袤无垠的「比特大陆」上&#xff0c;阳光奋力地穿过「内存森林」中错综复杂的代码枝叶缝隙&#xff0c;洒下一片片斑驳陆离、如梦似幻的光影。林间的空气里&#xff0c;弥漫着一股浓郁的十六进制锈蚀味&#xff0c;仿佛在诉说着这片森林中隐藏的古老秘密。 一位零基…...

【HarmonyOS Next】图片选择方案

背景 封装一个选择图片和调用拍照相机的按钮&#xff0c;展示api13下选择图片和调用相机&#xff0c;可以使用不申请用户权限的方式&#xff0c;进行图片的选择和修改。但是&#xff0c;目前方案并未包含上传图片保存的功能&#xff0c;仅提供图片选择或者拍照后&#xff0c;图…...

【C语言】移除元素

移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后…...

Python----Python高级(网络编程:网络高级:多播和广播,C/S架构,TCP,UDP,网络编程)

一、多播和广播 1.1、多播 1.1.1、定义 多播&#xff08;Multicast&#xff09;也称为组播&#xff0c;是一种一对多的通信方式&#xff0c;将信息从单个源发送到 多个特定的接收者。这些接收者组成一个特定的多播组&#xff0c;只有加入该组的设备才会接 收和处理多播数据。…...

CES 2025 上的创新方案——无电池智能纸尿裤-AP4470

这款纸尿裤采用了可重复使用的组件&#xff0c;通过检测液体的存在来增强老年人和婴儿的护理&#xff0c;即使电极上滴了几滴液体也是如此。 其原理为尿液中的水分作为电解液&#xff0c;将尿布里安装的两种导电性材料作为正负极&#xff0c;充当电池&#xff0c;从而产生300m…...

Java 运算符

运算符用于对变量和值执行运算。 在下面的示例中&#xff0c;我们使用 运算符将两个值相加&#xff1a; int x 100 50;尽管经常使用运算符将​​两个值加在一起&#xff0c;例如在上面的示例中&#xff0c;但是它也可以用于将一个变量和一个值或一个变量和另一个变量加在一…...

【一文读懂】什么是MVVM?

MVVM Vue 是一个渐进式的 JavaScript 框架&#xff0c;它采用了 MVVM&#xff08;Model-View-ViewModel&#xff09;设计模式&#xff0c;这使得它能够高效地进行数据绑定和用户界面的更新。 概念 1. Model&#xff08;模型&#xff09; 含义&#xff1a;Model 代表应用程序…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...