Spring中的常用注解(一)

目录

@RequestMapping

 @PostMapping

 @RequestBody

@Controller 

@ResponseBody 

@RestController 

@Autowired  

@Qualifier 

@Primary  

@Service

@Component

@Bean和@Configuration
----------------

@RequestMapping

@RequestMapping 是 Spring Framework 中用于配置 URL 映射的注解,

@RequestMapping(value = "/hello", method = RequestMethod.GET)
@ResponseBody
public String sayHello() {return "Hello, World!";
}

在这个例子中,如果@RequestMapping("/hello") 标注在类上,表示该类中定义的所有方法都将基于 /hello 路径。值得注意的是,Spring 4.3 之后引入了新的组合注解,如 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping 和 @PatchMapping,这些注解是 @RequestMapping 的特化版本,用于简化常见 HTTP 方法的映射配置。例如,@GetMapping("/hello") 等同于 @RequestMapping(value = "/hello", method = RequestMethod.GET)

 @PostMapping

@PostMapping 是一个Spring Framework中用于处理HTTP POST请求的注解,这个注解实际上是 @RequestMapping(method = RequestMethod.POST) 的简写形式,

@PostMapping("/create")
public String createSomthing(@RequestBody MyData data){//处理 POST 请求的数据,这里假设 MyData 是一个简单的 POJO(Plain Old Java Object)return "Data created successfully!!";
}

在上面的例子中,@PostMapping("/create") 注解表示当收到路径为 /create 的 POST 请求时,应该调用 createSomething 方法。@RequestBody 注解用于将请求体中的 JSON 或 XML 数据绑定到 MyData 类型的参数上。

 @RequestBody

@RequestBody 是 Spring Framework 中的一个注解,它用于将 HTTP 请求的请求体(Request Body)绑定到 Controller 层方法的参数上,当你在 Controller 的方法参数上使用 @RequestBody 注解时,Spring 会使用 HTTP 消息转换器(如 MappingJackson2HttpMessageConverter 对于 JSON)来解析请求体,并将其转换为指定的 Java 类型。

@PostMapping("/api/users")
public User create(@RequestBody User user){//在这里,user 对象将会包含从请求体中解析出来的数据return user;
}

在这个例子中,当客户端向 /api/users 发送一个包含 JSON 数据的 POST 请求时,Spring 会自动将请求体中的 JSON 数据转换为 User 类型的对象,并将其作为参数传递给 createUser 方法。

@Controller 

@Controller 是 Spring Framework 中的一个注解,它用于标记一个类作为 Controller 类。在 Spring MVC 中,Controller 负责处理由 DispatcherServlet 发送过来的请求,并返回模型和视图。@Controller 注解告诉 Spring,这个类将作为一个 Controller 被使用,并且这个类中的方法可能会处理 HTTP 请求。

@Controller
public class MyController {@GetMapping("/hello")public String sayHello() {// 处理逻辑...return "helloView"; // 返回视图名称}
}

在这个例子中,MyController 类被标记为 @Controller,这意味着 Spring 会将其识别为一个 Controller 类。sayHello 方法使用 @GetMapping("/hello") 注解,表明当接收到路径为 /hello 的 GET 请求时,该方法将被调用。方法返回的字符串 "helloView" 通常对应于一个视图名称,Spring MVC 会使用这个名称来查找并渲染相应的视图。

@ResponseBody 

@ResponseBody 是 Spring Framework 中的一个注解,用于标注在控制器(Controller)类的方法上,指示该方法返回的结果应该直接写入 HTTP 响应体(response body)中,而不是解析为视图(View)。这通常用于实现 RESTful Web 服务,其中控制器方法返回 JSON、XML 或其他媒体类型的数据,而不是 HTML 页面。当你在控制器方法上使用 @ResponseBody 注解时,Spring 会将返回的对象自动转换为 JSON 或 XML(取决于请求的 Accept 头部和配置的消息转换器),并将其作为 HTTP 响应返回给客户端。

@Controller
public class MyRestController {@GetMapping("/getdata")@ResponseBodypublic MyData getData() {MyData data = new MyData();data.setId(1);data.setName("Example Data");return data;}// 一个简单的POJO(Plain Old Java Object)public static class MyData {private int id;private String name;// Getters and setters omitted for brevity}
}

在上面的例子中,getData 方法被标注了 @ResponseBody。当用户访问 /getdata 路径时,这个方法会被调用,并且返回的 MyData 对象会自动转换为 JSON(或其他配置的媒体类型),然后发送给客户端。

@RestController 

@RestController 是 Spring Framework 提供的一个注解,用于创建 RESTful Web 服务。这个注解是 @Controller 和 @ResponseBody 的组合体,它告诉 Spring 这是一个控制器,并且该类中的所有方法都默认添加了 @ResponseBody 注解。当你在一个类上使用 @RestController 注解时,这意味着该类是一个控制器,并且它的所有方法都将返回域对象(如 JSON 或 XML 格式的数据),而不是视图。

@RestController
public class MyRestController {@GetMapping("/hello")public String sayHello() {return "Hello, World!";}@GetMapping("/user")public User getUser() {User user = new User();user.setName("John Doe");user.setAge(30);return user;}// 一个简单的POJO(Plain Old Java Object)public static class User {private String name;private int age;// Getters and setters}
}

在上面的示例中,MyRestController 类使用了 @RestController 注解,这表明它是一个 RESTful 控制器。sayHello 方法返回一个简单的字符串,而 getUser 方法返回一个 User 对象。由于类被标记为 @RestController,因此这两个方法都会将返回的数据直接写入 HTTP 响应体,而不是解析为视图。

@Autowired  

@Autowired 是 Spring 框架提供的一个注解,它用于自动装配 Spring 容器中的 bean。通过使用 @Autowired,你可以让 Spring 自动地将依赖项注入到你的类中,而无需显式地通过 new 关键字创建对象或通过其他方式手动获取依赖项。

@Component
public class MyClass {@Autowiredprivate MyDependency myDependency;
}

@Autowired 默认是按类型进行自动装配的。如果 Spring 容器中存在多个相同类型的 bean,你需要使用 @Primary 注解来指定首选的 bean,或者使用 @Qualifier 注解来精确指定要注入的 bean 的名称。你可以通过设置 @Autowired 的 required 属性为 false 来表示该依赖项是可选的,即如果 Spring 容器中没有匹配的 bean,也不会抛出异常。从 Spring 4.3 开始,如果类只有一个构造函数,那么即使不使用 @Autowired 注解,Spring 也会自动使用该构造函数进行依赖注入。

@Qualifier 

@Qualifier 在Spring框架中,@Qualifier注解主要用于消除自动装配时的歧义。@Qualifier注解的工作原理是,它允许开发者指定一个名称,这个名称应该与想要注入的bean的名称相匹配。这样,当Spring执行自动装配时,它会根据@Qualifier提供的名称来找到对应的bean实例,并将其注入到目标位置。

@Service("userService1")
public class UserServiceImpl1 implements UserService {// ...
}@Service("userService2")
public class UserServiceImpl2 implements UserService {// ...
}@Component
public class MyComponent {@Autowired@Qualifier("userService1") // 指定注入的名称为"userService1"的beanprivate UserService userService;// ...
}

在这个例子中,我们有两个实现了UserService接口的bean:UserServiceImpl1和UserServiceImpl2。在MyComponent类中,我们使用@Autowired和@Qualifier("userService1")来明确指定要注入的是名称为userService1的bean实例。需要注意的是,@Qualifier注解通常与@Autowired一起使用,而且它只能用于解决按类型自动装配时的歧义问题。如果你的应用中只有一种类型的bean,或者你已经通过其他方式(如使用@Primary注解)指定了首选的bean,那么你可能不需要使用@Qualifier。

@Primary  

@Primary 在Spring框架中,@Primary注解用于在多个相同类型的bean中指定一个首选的bean。当Spring容器中存在多个相同类型的bean,且没有明确指定注入哪一个时,@Autowired会不知道选择哪一个bean进行注入。此时,如果其中一个bean上标注了@Primary,那么Spring会选择这个标注了@Primary的bean作为默认注入的bean。这个注解通常用在类上,表示当存在多个相同类型的bean时,该类是自动装配的首选。

@Service
public class DefaultUserService implements UserService {// ...
}@Primary
@Service
public class SpecializedUserService implements UserService {// 这个实现将被优先注入,因为它被标记为@Primary// ...
}@Component
public class MyComponent {private final UserService userService;@Autowiredpublic MyComponent(UserService userService) {this.userService = userService;}
}

在这个例子中,DefaultUserService和SpecializedUserService都实现了UserService接口。由于SpecializedUserService上标注了@Primary,所以当MyComponent通过构造函数注入UserService时,Spring会自动选择SpecializedUserService作为注入的bean。

@Service

@Service 在Spring框架中,@Service是一个特殊的注解,用于标识业务逻辑层(Service层)的组件。它是Spring的@Component注解的一个特化。从技术上讲,@Service注解本身与@Component注解的功能是相同的,都是用于定义一个bean,让Spring容器来管理。但是,@Service提供了更明确的语义,表明被标注的类是一个业务逻辑服务。

使用@Service注解的好处是:
自动检测:Spring会自动扫描标注了@Service的类,并将其实例化、初始化,最后注册到Spring IoC容器中。这样,你就可以在其他地方通过自动装配(例如,使用@Autowired注解)来注入这些服务。
明确的语义:@Service注解提供了比@Component更具体的语义,它清楚地表明了该类是业务逻辑服务的一部分。这有助于其他开发者理解代码的结构和用途。
便于管理和维护:通过使用@Service等注解,可以更容易地对应用中的不同组件进行分类和管理。这对于大型项目的维护尤为重要。

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public User getUserById(Long id) {return userRepository.findById(id).orElse(null);}// 其他业务逻辑方法...
}

在这个例子中,UserService类被标注为@Service,这意味着Spring会将其作为一个bean来管理,并自动处理依赖注入。在这个类中,我们还通过@Autowired注解注入了UserRepository的实例,以便在业务逻辑中使用。

@Component

@Component 在Spring框架中,@Component是一个通用性的注解,用于定义Spring管理的bean。当你将一个类标注为@Component时,Spring会在应用启动时自动扫描并检测到这个类,然后将其注册为一个bean,在Spring的IoC(控制反转)容器中管理。@Component注解通常用于那些不属于@Controller、@Service或@Repository等特定层面的组件。它是一个泛化的概念,表示被标注的类是一个组件,但不具体指明它属于哪一层。使用@Component注解的类通常不需要实现任何特定的接口或继承特定的基类。Spring会为这些类创建实例,并管理它们的生命周期。

@Component
public class MyComponent {// 类的实现
}

在这个例子中,MyComponent类被标注为@Component,这意味着Spring会在启动时检测到这个类,并自动创建一个bean实例,将其注册到Spring的IoC容器中。除了@Component,Spring还提供了几个特化的注解,如@Controller、@Service和@Repository,它们本质上都是@Component的特化版本,用于标识特定类型的组件。这些特化注解除了继承@Component的功能外,还提供了额外的语义信息,有助于描述组件的角色。
@Controller:用于标注控制器类,通常与MVC框架一起使用。
@Service:用于标注业务逻辑服务类。
@Repository:用于标注数据访问对象(DAO)类,通常与数据库交互。

@Bean和@Configuration

@Bean 在Spring框架中,@Bean是一个方法级别的注解,主要用于配置类中声明一个Bean。它表示这个方法返回一个对象,这个对象应该被注册到Spring容器中作为Bean进行管理。通过@Bean注解,我们可以自定义Bean的创建和初始化过程,包括指定Bean的名称、作用域、依赖关系等。这个注解通常与@Configuration注解一起使用,后者标记一个类为Spring的配置类。在配置类中,方法名默认作为Bean的ID,但也可以通过@Bean的name属性自定义

@Configuration 在Spring框架中,@Configuration 是一个类级别的注解,它用于定义配置类,这些配置类替代了传统的XML配置文件。使用 @Configuration 注解的类通常包含 @Bean 注解的方法,这些方法用于创建和配置Spring容器中的bean

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}@Beanpublic MyAnotherService myAnotherService() {return new MyAnotherServiceImpl(myService());}
}

在这个例子中,AppConfig 类被标记为 @Configuration,表明它是一个配置类。该类定义了两个 @Bean 方法,分别用于创建 MyService 和 MyAnotherService 的实例。注意,在 myAnotherService() 方法中,我们直接调用了 myService() 方法来获取 MyService 的bean实例。这是因为在 @Configuration 类中,@Bean 方法可以相互调用,并且Spring会确保这些bean是单例的,即使你多次调用 @Bean 方法,也只会得到一个bean实例。

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

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

相关文章

三大知名向量化模型比较分析——m3e,bge,bce

先聊聊出处。 M3E 是 Moka Massive Mixed Embedding 的缩写, Moka,此模型由 MokaAI 训练,开源和评测,训练脚本使用 uniem ,评测 BenchMark 使用 MTEB-zhMassive,此模型通过千万级 (2200w) 的中文句对数据…

常用图像分类、目标检测模型性能测试

说明 测试常用CV模型在单张图像上的识别速度,不包含图像读取时间,但包含图像预处理。可以在以后的应用中根据硬件配置选取合适的模型,达到最佳效果。其中推理速度为正常推理的速度,加速CPU使用openvino加速,GPU使用te…

智慧电子班牌系统,智慧班牌源码,为校园提供了便捷、高效、智能的信息管理和服务方式

智慧班牌在实现智慧校园的数字化建设中扮演着重要角色,它通过集成多种技术和功能,为校园提供了便捷、高效、智能的信息管理和服务方式。以下是智慧班牌如何实现智慧校园的数字化建设的具体方式: 一、信息集成与展示 基础信息展示&#xff1a…

海外媒体发稿:葡萄牙-实现高效媒体软文发稿计划-大舍传媒

一、葡萄牙媒体环境概述 葡萄牙,位于欧洲大陆西南端的国家,拥有丰富的文化和历史。在这个国家,媒体行业也有着相当大的影响力。葡萄牙的媒体环境多元化,包括电视、广播、报纸、杂志和互联网等各个领域。 二、葡萄牙媒体发稿的重…

ABC分析模型详解

ABC分析模型详解与Python代码示例 一、ABC分析模型概述 ABC分析模型,又称为ABC分类法、帕累托分析法或80/20规则,是一种广泛应用于库存管理、质量管理等领域的分析方法。该方法的核心思想是在众多因素中识别出少数起决定作用的关键因素和多数影响较小的…

如何恢复电脑上删除的文件?快速恢复被删除文件的技巧【5个实用方法】

如何恢复电脑上删除的文件?电脑误删文件的情况很经常发生,删除文件后第一时间可以按下组合键CtrlZ撤销,这样能挽回99%以上的文件。当然,如果已经彻底删除,那么可以了解下本文整理的方法找回。 (一&#xff…

【计算机网络】学习指南及导论

个人主页:【😊个人主页】 系列专栏:【❤️计算机网络】 文章目录 前言我们为什么要学计算机网络?计算机网络概述计算机网络的分类按交换技术分类按使用者分类按传输介质分类按覆盖网络分类按覆盖网络分类 局域网的连接方式有线连接…

【HarmonyOS学习】动画

页面分类动画 显示动画 function animateTo(value: AnimateParam, event: () > void): void;代码如下:(实现属性变化引发的动画) Entry Component struct Animate_Page1 {State boxWidth: number 100;State boxHeight: number 100;Sta…

第一节Linux常见指令

目录 1.Linux下基本指令 ls指令 pwd 命令 cd 指令 知识点:理解树形结构 touch 指令 mkdir指令(重要) rmdir指令 && rm指令(重要) 知识点:ls file* 可以找到当前目录下任何以file开头的文件​编辑 知识点:热键 man指令()重要 补充知识点:nano cp…

前端程序员应该往全栈方向发展吗?还是坚守前端?

作者:寒蝉(知乎) 顺便吆喝一声,技术大厂,内推捞人,前/后端or测试←感兴趣 要求学历:全日制统招本科(非学院派即可): --加班偶尔较多,但周末加班两…

深入理解 Java 中 forEachOrdered 和 forEach 方法的区别

在 Java 8 中引入的 Stream API 提供了丰富的操作方法来处理集合数据。其中,forEachOrdered 和 forEach 是两个常用的方法,用于对集合中的元素进行操作。虽然它们看起来很相似,但它们在处理元素顺序上有着重要的区别。本文将深入探讨它们的不…

Android NDK开发之震动服务客户端编写程序(C++)

一、背景 最近有个小伙伴问我可不可以写一个可执行程序(C/C) 来实现Android设备的震动的功能。 作为一个多年的Android开发者,我觉得这是可以实现的。 但是由于过去我一直做App开发,也就把这个实现过程想简单了。 经过了几天的折腾,终于算是…

港股指数实时行情API接口

港股 指数 实时 行情 API接口 # Restful API https://tsanghi.com/api/fin/index/HKG/realtime?token{token}&ticker{ticker}指定指数代码,获取该指数的实时行情(开、高、低、收、量)。 更新周期:实时。 请求方式&#xff1a…

vue router 切换路由的时候,页面的动画效果,使页面切换好看,以及控制有的页面使用切换路由特效,有的页面不用

一、使用切换效果 在router文件中 useTransition: true代表需要动画 meta: { title: “新开卡预填表单”, keepAlive: true, useTransition: true }, [{path: "/",name: "Home",meta: {title: "首页",keepAlive: true,useTransition: false},c…

论文分享|RAG理论-第四篇-生成

0.前言 本系列以同济大学的检索增强生成(RAG)综述[1],ACL2023 检索增强语言模型(RALM) Tutorial[2]作为参考材料,讲解RAG的前世今身,包含概述,评估方法,检索器&#xff…

给你的博客添加数据统计功能

20.数据统计 我们可以给博客添加统计功能,这里以百度统计和谷歌统计为例。 ‍ 百度统计 ‍ 添加网站 登陆百度统计后台:百度统计——一站式智能数据分析与应用平台,并登录,然后进入产品: ‍ 在使用设置–网站列…

图解KMP算法,带你彻底吃透KMP

模式串匹配——KMP算法 KMP算法一直是一个比较难以理解的算法,本篇文章主要根据《大话数据结构》中关于KMP算法的讲解,结合自己的思考,对于KMP算法进行一个比较详细的解释。 由于博主本人水平有限,难免会出现一些错误。如果发现…

WPF学习(7) --MVVM模式

1. MVVM模式概述 MVVM模式由三个主要部分组成: Model(模型):包含应用程序的业务逻辑和数据。通常是数据对象和数据访问层。View(视图):用户界面部分,展示数据并与用户进行交互。通…

C语言课程回顾:十、C语言之 指针

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C语言之 指针 10 指针10.1 地址指针的基本概念10.2 变量的指针和指向变量的指针变量10.2.1 定义一个指针变量10.2.2 指针变量的引用10.2.3 指针变量作为函数参数10.2.4 指针变…

电脑远程开关机

1. 远程开机 参考:https://post.smzdm.com/p/664774/ 1.1 Wake On LAN - 局域网唤醒(需要主板支持,一般都支持) 要使用远程唤醒,有几种方式:使用类似向日葵开机棒(很贵)、公网ip&…