@RequiredArgsConstructor和@Authwired
我们在java后端书写接口时,对service层成员变量的注入和使用有以下两种实现方式:
1) @RequiredArgsConstructor
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@GetMapping("/users")
public List<User> getUsers(@RequestParam String query) {
return userService.searchUsers(query);
}
}
2) @Autowired
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public List<User> getUsers(@RequestParam String query) {
return userService.searchUsers(query);
}
}
看完代码,估计大家能看出个大概,不知道有没有人会觉得当成员变量不为final时,就使用@Authwired;为final时,就用@RequiredArgsConstructor,其实不然,我们看下面的代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/users")
public List<User> getUsers(@RequestParam String query) {
return userService.searchUsers(query);
}
}
当成员变量为 final 时,可以使用 @Autowired 注解来进行注入,但是需要结合构造函数注入的方式来实现。
接下来,我们具体看看这两个注解的区别:
- 生成构造函数的方式:
● @RequiredArgsConstructor:这是 Lombok 提供的注解,它会在编译时根据类中被声明为 final 或 @NonNull 的字段生成一个构造函数。生成的构造函数用于初始化这些字段,并将它们标记为必需参数。这样,在创建对象时,这些字段必须被传入构造函数中。
● @Autowired:这是 Spring 框架提供的注解,它用于自动注入依赖项。通过在构造函数、字段或方法上使用 @Autowired 注解,Spring 框架会自动解析依赖项并进行注入。 - 适用范围:
● @RequiredArgsConstructor:由于是 Lombok 提供的注解,它可以在任何环境中使用,而不依赖于特定的框架或库。
● @Autowired:这是 Spring 框架提供的注解,用于在 Spring 环境中实现依赖注入。它需要依赖于 Spring 框架,并且用于在 Spring 应用程序中自动解析和注入依赖项。 - 字段修饰符要求:
● @RequiredArgsConstructor:该注解可以与 private final 或 @NonNull 修饰的字段一起使用,生成的构造函数会将这些字段标记为必需参数。
● @Autowired:该注解可以与非 final 字段一起使用,并且在运行时自动注入相关的依赖项。
这下,想必你就能清楚的知道他俩的区别了。其实对于成员变量是否为final,主要根据自己的业务需求,看变量在运行时是否需要变化,当然大部分情况下都是final。如果不是final,那只能用@Authwired注解,如果是final,那肯定是@RequiredArgsConstructor更方便,不然用到的service多了,你的构造函数得写多少个参数。而且,@RequiredArgsConstructor还可以用于实体层。
@RequiredArgsConstructor和@Authwired的更多相关文章
- Lombok(1.14.8) - @NoArgsConstructor, @RequiredArgsConstructor & @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor,提供一个无参的构造方法. package com.huey.hello.bean; import java.util.Dat ...
- 还在使用@Autowrired注入?不妨试试@RequiredArgsConstructor
一.前言 小编最近在项目里看到有的同事大神用到了Lombok中的一个@RequiredArgsConstructor,带着好奇发现这个东西就是简化了一些@Autowired注解,想想如果一个Servi ...
- SpringBoot - Lombok使用详解3(@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor)
五.Lombok 注解详解(3) 5,@NoArgsConstructor 注解在类上,为类提供一个无参的构造方法. 注意: 当类中有 final 字段没有被初始化时,编译器会报错,此时可用 @NoA ...
- 注解:@RequiredArgsConstructor、 @Validated、 @Valid、 @Lazy
1. lombok注解:@RequiredArgsConstructor Spring 依赖注入方式 1.通过 @Autowire.@Resource 等注解注入, 2.通过构造器的方式进行依赖注入. ...
- Spring 注解中@Resource 和 @Authwired 的区别
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****
http://www.idouba.net/spring-cloud-source-eureka-client-api/?utm_source=tuicool&utm_medium=refer ...
- Lombok简化Java代码
导包:import lombok.Data; Lombok简化Java代码: 在Lombok中,生成构造方法的annotation一共有三个:@NoArgsConstructor, @Required ...
- Spring之IoC总结帖
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development a ...
- 使用Lombok简化你的代码
一.安装 eclipse 下载:https://projectlombok.org/ 双击安装即可. 重启eclipse/myeclipse 如果有报错,clean一下项目 ...
随机推荐
- 在.net项目中添加Husky.Net提交验证
参考:C# 项目添加 husky - jesn - 博客园 (cnblogs.com) 官方文档:Getting Started | Husky.Net (alirezanet.github.io) ...
- Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据
6.1.1 提供带注解的限定符元数据 在第6.9.4节"使用@Qualifier微调基于注解的自动装配"中讨论了@Qualifier注解.该部分中的示例阐释了,在解析自动装配候选者 ...
- AI与健康管理:趋势与未来
目录 引言 随着人工智能技术的不断发展,健康管理也逐渐成为了一个新的研究领域.AI技术可以为健康管理提供智能化.个性化.高效的支持,使得健康管理更加人性化和科学.本文将介绍AI与健康管理的技术原理.实 ...
- celery笔记七之周期/定时任务及crontab定义
本文首发于公众号:Hunter后端 原文链接:celery笔记七之周期/定时任务及crontab定义 periodic task,即为周期,或者定时任务,比如说每天晚上零点零分需要运行一遍某个函数,或 ...
- 华为云GaussDB亮相2023可信数据库发展大会,荣获三项评测证书!
摘要:2023可信数据库发展大会上,华为云数据库服务产品部总经理苏光牛围绕华为云GaussDB的产品能力和实践进行了分享 本文分享自华为云社区<华为云GaussDB亮相2023可信数据库发展大会 ...
- vue报错解决Duplicate keys detected: ‘[object Object]’
最近在做vue项目时遇到了报错 Duplicate keys detected: '[object Object]'. This may cause an update error. 由于这个 ...
- 从硅谷到北京,百位AI大咖连续两天集聚讨论AI智能和实践
全球AI大咖齐聚北京,探讨人工智能前沿!百位AI大咖倾力出席,冲向AI大浪潮! AI从业者和企业家们,一场引领未来的科技盛宴即将在北京掀起!我们荣幸地宣布,第四届"数据智能创新与实践人工智能 ...
- 【转载】DSP 缓存机制及影响测试
本文主要以DSP讲解cache原理,但原理与CPU是相通的,故转载,原文地址:https://blog.csdn.net/qq_39376747/article/details/112794096 目 ...
- subprocess Python执行系统命令最优选模块
简介 subprocess 是 Python 中执行操作系统级别的命令的模块,所谓系级级别的命令就是如ls /etc/user ifconfig 等和操作系统有关的命令. subprocess 创建子 ...
- PTA 21级数据结构与算法实验4—字符串和数组
目录 7-1 字符串模式匹配(KMP) 7-2 [模板]KMP字符串匹配 7-3 统计子串 7-4 好中缀 7-5 病毒变种 7-6 判断对称矩阵 7-7 三元组顺序表表示的稀疏矩阵转置运算Ⅰ 7-8 ...