springbean 的 setter/构造注入

news2025/1/18 9:50:41

文章目录

  • 前言
  • 一、另外两种注入的怎么用?
  • 二、使用setter和构造注入的步骤
    • 1. 搞一个配置类,用户获取spring容器中的bean
    • 2. 由于有静态方法,所以直接调用
  • 三、使用final 的构造注入方式(推荐)
  • 总结


前言

我们知道,一般java中的依赖注入有三种:
1 属性注入
2 settter注入
3 构造注入

我们习惯于在spring容器下进行开发了,所以一般都是用属性注入的方式,例如:

 @Autowired
 // @Resource
 private PayService payService;

一、另外两种注入的怎么用?

今天遇到了一个问题,真正的体会到了另外两种注入的高明之处;

  • 属性注入, 必须依赖于spring容器,既: 你想用属性注入,那么你必须身在容器中(所在位置也被纳入了spring容器)
  • 另外两种注入,可以不在spring容器中,也可以获取到spring对象实例,然后进行相应操作!

二、使用setter和构造注入的步骤

1. 搞一个配置类,用户获取spring容器中的bean

代码如下(示例):

@Configuration
public class ResourceConfig {


    // setter 注入
    //@Resource
    //public void setAliPayService(AliPayServiceImpl aliPayService) {
    //    ResourceConfig.aliPayService = aliPayService;
    //}


    public ResourceConfig() {
    }


    // 构造注入
    @Autowired
    public ResourceConfig(AliPayServiceImpl aliPayService) {
        ResourceConfig.aliPayService = aliPayService;
    }

    private static AliPayServiceImpl aliPayService;



    public static AliPayServiceImpl getAliPayService() {
        return aliPayService;
    }
}

2. 由于有静态方法,所以直接调用

代码如下(示例):

@SpringBootTest
class PayServiceTest123 {
    @Test
    void test(){
        AliPayServiceImpl aliPayService = ResourceConfig.getAliPayService();
        String s = aliPayService.toPay("123", 3);
        System.out.println(s);
    }
}

我甚至可以在static的方法中调用这个 实现类的方法~~


获取bean

三、使用final 的构造注入方式(推荐)

这种方式也是springboot官方推荐的方式,依然可以解决上述说的问题;
Springboot官方建议使用final来修饰成员变量,final修饰的成员变量是不能够被修改的,就不能被反射了;
利用 @RequiredArgsConstructor + final 修饰,替换掉 @Autowired/@Resource

  • @RequiredArgsConstructor 也是一种构造注入,相当于为每一个final字段或者non-null字段生成一个构造方法
    使用示例如下:
@RequiredArgsConstructor
@Controller
public class AdminUserController {

	private final IUserService iUserService;
	
	@PostMapping(/login”)
	public Result adminLogin(HttpServletResponse response, String username,String password) {
		//…
	}
}
  • @AllArgsConstructor 和@RequiredArgsConstructor都可以用来替换@Autowired写法,区别在@RequiredArgsConstructor必须要有final修饰,使用@AllArgsConstructor后,@Value会失效,获取不到值。使用@RequiredArgsConstructor则正常。今后注入service、mapper等都使用@RequiredArgsConstructor好了。

总结

基于setter和构造注入得到的bean,其实也是spring中的,但是我将它存了一个静态变量副本,然后直接使用了~~

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

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

相关文章

Golang每日一练(leetDay0039) 二叉树专题(8)

目录 115. 不同的子序列 Distinct Subsequences 🌟🌟🌟 116. 填充每个节点的下一个右侧节点指针 Populating-next-right-pointers-in-each-node 🌟🌟 117. 填充每个节点的下一个右侧节点指针 II Populating-next-ri…

模拟信号放大转换器 非隔离 线性对应输入输出 大功率负载

概述: 导轨安装DIN11 NIPO 系列模拟信号放大器是一种将输入信号放大、转换成按比例输出的直流信号放大器。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要直流信号测控的行业。此系列产品内部采用稳压电路,通过等比例控制线性放大输…

Threshold ECDSA——web3.0开发中的门限签名

多重签名 1.联名账户,任何一个密钥都能打开账户。 2.储蓄账户,需要所有密钥才能打开账户。 3.级联账户,可以使用部分密钥做部分功能,需要所有密钥才能执行全部功能。 4.在加密货币中,多重签名通过创建一个多重签名…

超详细从入门到精通,pytest自动化测试框架实战-fixture多样玩法(九)

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 在编写测试用例&…

uniapp开发小程序:使用webview 跳转外部链接

一、使用uniapp开发小程序时,要跳转外部链接,实现的效果如下: 二、实现的步骤: ①先在自己uniapp项目pages.json中建一个页面webview.vue {"path" : "pages/webview/webview","style" : …

(详细)带你运行ShanghaiTech数据集预训练模型——人群计数算法

写在前面 ShanghaiTech数据集是现有的人群计数领域比较常用的训练测试数据集,该博客将详细讲述如何跑通ShanghaiTech官方提供的预训练版本。 由于全部跑完ShanghaiTech数据集需要一定的时间,今天只以其中的ped2数据集(体量最小)…

linux_回收子进程(何为孤儿进程、僵尸进程、wait函数、waitpid函数)

接上一篇:linux_exec函数族-execl函数-execlp函数-execle函数-execv函数-execvp函数-execve函数 今天来向大家分享几个有趣的知识点,一个是孤儿进程,一个是僵尸进程,hhh,是不是很有趣,另外再来看看怎么去回…

Kubernetes集群调度增强之超容量扩容

作者:京东科技 徐宪章 1 什么是超容量扩容 超容量扩容功能,是指预先调度一定数量的工作节点,当业务高峰期或者集群整体负载较高时,可以使应用不必等待集群工作节点扩容,从而迅速完成应用横向扩容。通常情况下HPA、Cl…

链表与邻接表|栈与队列|kmp

目录 单链表(邻接表) 双链表 数组模拟栈、队列 单调栈 单调队列(滑动窗口) KMP 一、KMP算法基本概念与核心思想 二、next数组的含义 三、匹配的思路 四、求next数组 单链表(邻接表) #include &…

Linux操作基础(系统安全及应用)

文章目录一 、账号安全基本措施1.1 系统账号清理1.2 密码安全控制1.21 设置密码有效期1.3 命令历史限制1.31 修改history命令条数1.32 清空history的方式1.33 设置终端自动注销二 、使用su命令切换用户2.1 限制使用su命令切换用户2.2 sudo命令—提升执行权限三 、系统引导和登录…

OpenCV:介绍 SURF(加速稳健特征)以及其使用

我们将了解 SURF 的基础知识 我们将了解 OpenCV 中的 SURF 功能 理论 在上一章中,我们学习了 SIFT 用于关键点检测和描述的方法。但它相对较慢,人们需要更快速的版本。2006年,Bay, H., Tuytelaars, T. 和 Van Gool, L 发表了另一篇论文 "SURF: 加速稳健特征",介…

机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据

文章目录1、前言2、定义及公式3、案例代码1、数据解析2、绘制散点图3、多项式回归、拟合4、注意事项1、前言 ​ 当分析数据时,如果我们找的不是直线或者超平面,而是一条曲线,那么就可以用多项式回归来分析和预测。 2、定义及公式 ​ 多项式…

《花雕学AI》哪种技能5年10年后还会被市场需要? 该如何提高这些能力?

随着AI人工智能、ChatGPT等新的技术革新的发展,未来职业场景确实会发生变化,一些传统的职业可能会被取代,而一些新的职业可能会出现。根据世界经济论坛所发布的《未来就业报告》,一半的劳动力需要在2025年之前完成技能重塑。那么&…

Harmony OS 开发指南——DevEco Device Tool 安装配置

本文介绍如何在Windows主机上安装DevEco Device Tool工具。 坑点总结: 国内部分网络环境下,安装npm包可能会很慢或者超时,推荐使用国内npm源(如淘宝源、华为源等);serialport这个npm包安装的过程中需要编…

C/C++笔记-记录一次对qmake生成的Makefile的分析(2023-02-07)

如下Qt代码&#xff1a; ConsoleDemo.pro QT core QT - guiTARGET ConsoleDemo CONFIG console CONFIG - app_bundleTEMPLATE appSOURCES main.cpp main.cpp #include <QCoreApplication> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplic…

安装Kafka 基础命令

目录 解压 改名 修改配置文件 创建目录用于存放日志 创建修改myid 添加环境变量 刷新环境变量 测试 启动zookeeper 启动kafka 关闭kafka kafka基础命令 查看消息队列 创建消息队列 查看队列详情 查询指定队列消息数量 生产者消费者 生产消息 消费消息 解压 …

简单分享婚庆小程序开发怎么做

婚庆行业的服务范围不再仅限于婚纱照、婚礼主持等服务&#xff0c;消费者希望在婚庆服务商获得更多的服务&#xff0c;导致行业服务范围不断扩大、服务类目越发丰富&#xff0c;而商家在此基础上&#xff0c;更需要考虑提高服务质量与效率&#xff0c;合理利用资源提供服务。小…

Jmeter5.1的安装

1.由于&#xff0c;jmeter 是用纯java开发的一个可跨平台的绿色软件&#xff0c;所以&#xff0c;我们在使用jmeter之前&#xff0c;必须要安装基于Windows下的jdk环境。下面安装jdk,检查是否安装jdk方法&#xff08;cmd运行输入java -version&#xff09;&#xff0c;如下图显…

81.qt qml-Canvas深入学习之好看的水纹波自定义控件V2

界面如下所示(外观参考ECharts 源码通过QML控件实现): 效果如下所示: 支持自定义颜色、自定义波峰数量、增幅、速度、水平偏移等 1.介绍 在我们之前38章38.qt quick-QML水纹波进度条_诺谦的博客-CSDN博客 写过一个简单的水纹波: 所以本质差不多. 2.QianRippleChartPage代码 该…

webgl-矩阵、旋转、平移、缩放

关键代码 旋转 /* * [ * cosB, -sinB, 0, 0, * sinB, cosB, 0, 0, * 0, 0, 1, 0, * 0, 0, 0, 1 * ] * * 矩阵本该是这个但是由于webgl的矩阵行和列是颠倒的所以我们传入的矩阵也需要倒置 */ rotationMatrix [ cosB, sinB, 0, 0, -sinB, cos…