当前位置: 首页 > 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 代表应用程序…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

GraphRAG优化新思路-开源的ROGRAG框架

目前的如微软开源的GraphRAG的工作流程都较为复杂&#xff0c;难以孤立地评估各个组件的贡献&#xff0c;传统的检索方法在处理复杂推理任务时可能不够有效&#xff0c;特别是在需要理解实体间关系或多跳知识的情况下。先说结论&#xff0c;看完后感觉这个框架性能上不会比Grap…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...