当前位置: 首页 > news >正文

JavaEE简单示例——依赖注入

简单介绍:

首先我们要知道,依赖注入就是赋值,带着这句话去理解依赖注入就非常的简单了,将文中所有的依赖注入全部脑部替换成给属性赋值,再去理解依赖注入的概念。

依赖注入(DI)是指IoC容器在运行期间动态地将某种依赖资源注入到对象中。依赖注入地基本思想是,明确地定义组件接口,独立开发各个组件,然后根据组件地依赖关系组装运行。

依赖注入(DI)和控制反转(IoC)是从不同角度来描述了同一件事情。依赖注入是从应用程序地角度描述,而控制反转是从IoC容器角度描述。

使用方法:

依赖注入有两种类型,一种是构造方法地方式,一种是使用setter地方式。这两种方式其实就是对应了给属性赋值地两种方式,那么我们就针对这两种方式去详细地介绍一下这两种方式地区别和使用方式。

代码实现:

构造方法地方式:<constructor-arg>

我们继续打开之前我们创建的项目,这个项目估计我们要用很长时间,所以一定要保留好。然后我们修改一下Spring的Bean管理XML配置文件:

使用构造方法的方式创建对象,使用的标签就是使用<constructor-age>标签,name属性是要复制的属性值,value属性是用来给基本数据类型赋值,ref用来给引用数据类型赋值,为了验证这个方法确实是使用了构造方法的方式进行依赖注入,我们在构造方法里输出一句话:

 

如果我们在创建对象的时候输出了这句话,那么就可以说明确实是试用了构造方法的方式创建了对象,接下来,我们就来到测试类进行测试。

很好,确实跟我们之前想的一样,输出了我们在构造方法里的输出语句,并且也创建出了我们的对象。 

使用setter地方式:<property>

使用setter的方式创建对象和我们之前演示的效果是一样的,只不过把<constructor-age>标签换成了<property>标签:

同样的,我们在setter方法里写入一句话,如果这句话被输出了,那么就说明我们是使用setter方法进行依赖注入:

然后我们进入测试类进行测试:

 很合理,跟我们之前说的一样,确实是输出了我们在setter方法里输出的语句,使用setter进行依赖注入是比较流行的方式,这种方式更直观的看出我们的属性和值的对应关系。

关于使用setter方式进行依赖注入的时候的name的值:

在使用setter的方式进行依赖注入的时候,我们name属性对应的值并不是属性值,而是setter方法去掉关键字之后并将第一个字母变成小写之后的值,也就是说对应的其实是setter的方法名,只不过我们自动生成的标准的setter方法是使用set关键字和属性名组合的方式,所以如果是使用标准的方法生成的setter方法其实这个地方就可以写属性名,但是我们要知道这个地方的本质是什么。

注意点:

其实说白了,依赖注入就是给对象类的属性赋值的方式,在之后,我们还会学习基于注解的开发方式,无论到了什么时候Spring的依赖注入的含义都相当于是赋值,只不过这个赋值的动作是在程序运行中由Spring去管理,动态得进行赋值,而不需要我们去管理。

相关文章:

JavaEE简单示例——依赖注入

简单介绍&#xff1a; 首先我们要知道&#xff0c;依赖注入就是赋值&#xff0c;带着这句话去理解依赖注入就非常的简单了&#xff0c;将文中所有的依赖注入全部脑部替换成给属性赋值&#xff0c;再去理解依赖注入的概念。 依赖注入&#xff08;DI&#xff09;是指IoC容器在运…...

大数据框架之Hive: 第7章 综合案例练习(初级)

第7章 综合案例练习&#xff08;初级&#xff09; 一 环境准备 1.1 建表语句 hive> -- 创建学生表 DROP TABLE IF EXISTS student; create table if not exists student_info(stu_id string COMMENT 学生id,stu_name string COMMENT 学生姓名,birthday string COMMENT 出…...

kafka:linux 安装 kafka集群

kafka运行依赖于 jdk、zookeeper&#xff0c;kafka可视化工具选择kafka-eagle。所以要装的组件有&#xff1a;jdk、zookeeper、kafka、kafka-eagle一、安装jdk下载linux版本的jdk包&#xff0c;比如&#xff1a;jdk-8u192-linux-x64.tar.gz。将其复制到 /opt 目录下并解压&…...

springboot实现Hessian协议的RPC服务

背景 这段时间在公司接手了一个新项目&#xff0c;看到一段代码非常奇怪的&#xff0c;研究了好久。内容大概是这样 public void getUser (int id) {userService.getById(id); }当我点击这个方法进去的时候&#xff0c;我发现这个UserService类居然是导入jar包的一个接口&…...

2-6 SpringCloud快速开发入门: Eureka 服务注册中心发现与消费服务

接上一章节向Eureka 服务注册中心注册服务&#xff0c;这里讲讲Eureka 服务注册中心发现与消费服务 Eureka 服务注册中心发现与消费服务 我们已经搭建一个服务注册中心&#xff0c;同时也向这个服务注册中心注册了服务&#xff0c;接下来我们就可以发现和消费服务了&#xff0…...

Java-Web之s2-001与CommonsCollections

本文源自我个人入坑Java-Web安全的一点小经验&#xff0c;献给那些看得懂java代码但不知道从哪里入手代审的师傅们&#xff1a;&#xff09; Struts2之s2-001 环境配置 说说环境配置的问题&#xff0c;大多数人对漏洞复现的恐惧感还是来自于环境的配置&#xff0c;也许配了大…...

【JavaSE】数组的定义和使用(下)

数组的定义和使用&#xff08;下&#xff09;4. 数组练习4.1 模拟实现toString4.2 数组拷贝4.3 比较两个数组是否相同4.4 填充数组4.3 求数组中元素的平均值4.4 查找数组中指定元素&#xff08;顺序查找&#xff09;4.5 查找数组中指定元素&#xff08;二分查找&#xff09;4.6…...

Oracle 实现对全局错误语句的审计监控 ORA- alert

--将所有数据库ora-错误写入表create table error_tab (username varchar2(4000), d_current_nr_error varchar2(4000), ora_server_error_msg varchar2(4000), full_text varchar2(4000),errdate date);create or replace trigger error_triggerafter servererror on database…...

React解决样式冲突问题的方法

React解决样式冲突问题的方法 前言&#xff1a; 1、React最终编译打包后都在一个html页面中&#xff0c;如果在两个组件中取一样类名分别引用在自身&#xff0c;那么后者会覆盖前者。 2、默认情况下&#xff0c;只要导入了组件&#xff0c;不管组件有没有显示在页面中&#x…...

Go项目(用户操作微服务)

简介 用户留言、收藏、修改收货地址等&#xff0c;统一放在用户操作微服务这里按照业务类型划分微服务表设计&#xff0c;三张表// 用户收藏 type UserFav struct {BaseModel// 联合索引 idx_user_goods&#xff0c;且唯一User int32 gorm:"type:int;index:idx_user_goo…...

Spring Boot统一功能处理

目录 一、统一用户登录权限验证 1.1 自定义拦截器 1.2 将自定义拦截器加入到系统配置 1.3 统一访问前缀 二、统一异常处理 三、统一数据格式返回 一、统一用户登录权限验证 1.1 自定义拦截器 拦截器是一个普通的类&#xff0c;需要实现HandlerInterceptor接口并重写pre…...

ETCD多次出现CONTEXT DEADLINE EXCEEDED

roothqa-master-01:~# etcdctl --endpoints$ETCD_ENDPOINTS member list --write-outtable {“level”:“warn”,“ts”:“2020-03-23T14:19:45.0330800”,“caller”:“clientv3/retry_interceptor.go:61”,“msg”:“retrying of unary invoker failed”,“target”:“endpoi…...

git 提交 多人开发避免冲突

代码正常提交 git add . git commit -m ‘备注信息’ git status 查看本地提交状态 git pull 拉取代码 git push origin master 指定远程仓库名和分支名 ‘’ 如果多人开发 A和B 提交避免冲突 B拉取代码修改内容直接提交后 A也修改了内容在git add / git commit / git pull / g…...

求职复盘:干了四年外包出来,面试5次全挂

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;毕业于普通二本院校非计算机专业&#xff0c;18年跨专业入行测试&#xff0c;第一份工作在湖南某软件公司&#xff0c;做了接近4年的外包测试工程师&#xff0c;今年年初&#xff0c;感觉自己不能够再这样下去了&…...

AXI总线核心解读---基于官方文档

AXI总线 何处使用AXI ZYNQ异构芯片&#xff0c;内部总线使用的AXI总线纯FPGA的IP接口也要用高速接口&#xff0c;DDR&#xff08;AXI、传统&#xff09;等模块都有涉及到 什么是AXI总线 AXI的三种形式: AXI-FULL&#xff1a;高性能的存储器映射需求—可以256个以内发送 存储器…...

【Linux修炼】15.进程间通信

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 进程间通信进程间通信一.理解进程间通信1.1 什么是通信1.2 为什么要有通信1.3 如何进行进程间通信二.管道2.1 匿名管道2.2 匿名管道编码部分2.3 管道的特点2.4 如何理解命令行中的管道2.5 进程控制多个子进程三.命名管道3.…...

每天一道大厂SQL题【Day15】微众银行真题实战(五)

每天一道大厂SQL题【Day15】微众银行真题实战(五) 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&…...

如何优化查询大数据量的表

给你100万条数据的一张表&#xff0c;你将如何查询优化&#xff1f;1.两种查询引擎查询速度&#xff08;myIsam 引擎 &#xff09;InnoDB 中不保存表的具体行数&#xff0c;也就是说&#xff0c;执行select count(*) from table时&#xff0c;InnoDB要扫描一遍整个表来计算有多…...

卷麻了,00后Jmeter用的比我还熟练,简直没脸见人......

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对测试工具的使用感到困扰&#xff1f;前言性能测试是一个全栈工程师/架构师必会的技能之一&#xff0c;只有学会性能测试&#xff0c;才能根据得到的测试报告进行分析&#xff0c;找到系统性…...

力扣-树节点

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道中等的力扣sql练习题。 文章目录前言一、题目&#xff1a;608. 树节点二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言 …...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...