面基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博客

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

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

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

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

相关文章

【每日论文】Latent Radiance Fields with 3D-aware 2D Representations

下载论文或阅读原文&#xff0c;请点击&#xff1a;每日论文 摘要 中文 潜在3D重建技术在赋予3D语义理解和3D生成能力方面展现出巨大的潜力&#xff0c;它通过将2D特征提炼到3D空间来实现。然而&#xff0c;现有的方法在2D特征空间和3D表示之间的领域差距问题上挣扎&#xff…

CPP集群聊天服务器开发实践(七):Github上传项目

github链接&#xff1a;GitHub - arduino-ctrl/ClusterServer: 基于jsonmuduomysqlnginxredis的集群服务器与客户端通信源码 步骤如下&#xff1a; 1. github新建代码仓库&#xff0c;复制url 2. git clone https://github.com/arduino-ctrl/ClusterServer.git 3. 将项目文件…

作业。。。。。

顺序表按元素删除 参数&#xff1a;删除元素&#xff0c;顺序表 1.调用元素查找的函数 4.根据下表删除 delete_sub(list,sub); //删除元素 void delete_element(int element, Sqlist *list) …

二、从0开始卷出一个新项目之瑞萨RZT2M双核架构通信和工程构建

一、概述 RZT2M双核架构是同构多核&#xff0c;但双核针对不同应用 扩展多核架构和通信知识可参见嵌入式科普(30)一文看懂嵌入式MCU/MPU多核架构与通信 二、参考资料 用户手册&#xff1a;RZ/T2M Group Users Manual: Hardware R52内核手册&#xff1a;arm_cortex_r52_proc…

【HF设计模式】07-适配器模式 外观模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第7章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍适配器模式和外观模式&#xff0c;包括遇到的问题、采用的解决方案、遵循…

RDMA 高性能通信技术原理

目录 文章目录 目录DMA 与 RDMARDMA 特性和优势大带宽低延时 RDMA 协议栈标准RDMA 运行原理通信通路通信模型通信方式内存注册QP 建链常规流程双向控制 Send-Receive API 流程单向数据 Write API 流程单向数据 Read API 流程 RDMA Verbs API 编程基础网络连通性RDMA C/S 程序 D…

HCIA项目实践(网络)---NAT地址转化技术

十三 NAT网络地址转换技术 13.1 什么是NAT NAT&#xff08;Network Address Translation&#xff09;地址转换技术&#xff0c;是一种将内部网络的私有 IP 地址转换为外部网络的公有 IP 地址的技术。其主要作用是实现多个内部网络设备通过一个公有 IP 地址访问外部网络&#x…

【JAVA工程师从0开始学AI】,第四步:闭包与高阶函数——用Python的“魔法函数“重构Java思维

副标题&#xff1a;当严谨的Java遇上"七十二变"的Python函数式编程 历经变量战争、语法迷雾、函数对决&#xff0c;此刻我们将踏入Python最迷人的领域——函数式编程。当Java工程师还在用接口和匿名类实现回调时&#xff0c;Python的闭包已化身"智能机器人"…

el-tree选中数据重组成树

vueelement-ui 实现el-tree选择重新生成一个已选中的值组成新的数据树&#xff0c;效果如下 <template><div class"flex"><el-tree class"tree-row" :data"list" ref"tree" :props"{children: children, label: …

测试常见问题汇总-检查表(持续完善)

WEB页面常见的问题 按钮功能的实现&#xff1a;返回按钮是否可以正常返回 信息保存提交后&#xff0c;系统是否给出“成功”的提示信息&#xff0c;列表数据是否自动刷新 没有勾选任何记录直接点【删除】&#xff0c;是否给出“请先选择记录”的提示 删除是否有删除确认框 …

java后端开发day16--字符串(二)

&#xff08;以下内容全部来自上述课程&#xff09; 1.StringBuilder 因为StringBuilder是Java已经写好的类。 java在底层对他进行了一些特殊处理。 打印对象不是地址值而是属性值。 1.概述 StringBuilder可以看成是一个容器&#xff0c;创建之后里面的内容是可变的。 作用…

C++效率掌握之STL库:vector函数全解

文章目录 1.为什么要学习vector&#xff1f;什么是vector&#xff1f;2.vector类对象的常见构造3.vector类对象的容量操作4.vector类对象的迭代器5.vector类对象的元素修改6.vector类对象的元素访问7.vector迭代器失效问题希望读者们多多三连支持小编会继续更新你们的鼓励就是我…

人工智障的软件开发-容器化编码环境就绪-java-env

指令接收&#xff1a;「需要万能开发环境」 系统警报&#xff1a;检测到主人即将陷入"环境配置地狱" 启动救赎协议&#xff1a;构建量子化开发容器 终极目标&#xff1a;让"在我机器上能跑"成为历史文物 需求分析&#xff1a;碳基生物的先天缺陷 人类开发…

kkFileView二开之pdf转图片接口

kkFileView二开之Pdf转图片接口 kkFileView二开系列文章&#xff1a;1 kkFileView源码下载及编译2 Pdf转图片接口2.1 背景2.2 分析2.2 接口开发2.2.1 编写Pdf转图片方法2.2.2 编写转换接口 2.3 接口测试2.3.1 Pdf文件准备2.3.2 pdf2Image 3 部署 kkFileView二开系列文章&#x…

阅读论文笔记《Efficient Estimation of Word Representations in Vector Space》

这篇文章写于2013年&#xff0c;对理解 word2vec 的发展历程挺有帮助。 本文仅适用于 Word2Vect 的复盘 引言 这篇论文致力于探索从海量数据中学习高质量单词向量的技术。当时已发现词向量能保留语义特征&#xff0c;例如 “国王 - 男人 女人≈女王”。论文打算借助该特性&am…

SQL注入(SQL Injection)详解与实战

文章目录 一、什么是SQL注入&#xff1f;二、常见SQL注入类型三、手动注入步骤&#xff08;以CTF题目为例&#xff09;四、CTF实战技巧五、自动化工具&#xff1a;SQLMap六、防御措施七、CTF例题八、资源推荐 一、什么是SQL注入&#xff1f; SQL注入是一种通过用户输入构造恶意…

维护ceph集群

1. set: 设置标志位 # ceph osd set <flag_name> # ceph osd set noout # ceph osd set nodown # ceph osd set norecover 2. unset: 清除标志位 # ceph osd unset <flag_name> # ceph osd unset noout # ceph osd unset nodown # ceph osd unset norecover 3. 标志…

学习threejs,使用PointLight点光源

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PointLight 二、&…

java连接redis

1.使用 1.创建java工程 2.引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.2.0</version> </dependency> 3. //1.获取jedis对象&#xff0c;把所有对redis的操作都封装到…

论文笔记(七十二)Reward Centering(一)

Reward Centering&#xff08;一&#xff09; 文章概括摘要1 奖励中心化理论 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…