Spring--依赖注入:setter注入和构造器注入
依赖注入:描述了在容器中建立Bean于Bean之间依赖关系的过程
setter注入
在本来已经在service里面引用了bean的相关方法的基础上,再引用之前已经写过的userDao的对象,即在service对象里面既引用到BeanDao,也引用到UserDao,如图所示:
然后需要在这里再定义上他们的setter方法:
再在service的save方法里面引用到引用对象的save方法:
(必须要定义到setter方法,且在save方法里面引用他们自身的save方法,否则无法在ApplicationContext.xml文件里面定义bean)
定义的话,就像这样:
运行结果如下图所示:

当然啦,还可以定义其他的数据类型:
然后,以上的数据类型是在BookDaoImpl里面定义的,所以想要在Spring里面引用它的话,就需要在ApplicationContext.xml文件定义的bookDao的bean标签里面进行嵌套,如图所示:
运行出来的话,value里面的值,就相当于付给某个对象的数据的具体值:
构造器注入
通过名称可以看出,这次的注入方式主要是依赖于构造方法,不再依赖于set方法。
通过学习可以发现,这两种注入方式基本上是一致的,就是使用的方法形式发生了改变,具体实现如下:



将之前的Property换成上图的形式,里面的属性都没有发生改变

这种方式会存在这样一个问题:该种方式耦合度过高,当我改变book里面某一个属性的名称时,意味着.xml文件里面的name属性也要进行变化,灵活性太低
可以更改成下面这种方式,将name属性改成type属性:
然后就会发现,如果有两个数据类型相同的对象,就又出现问题了,那我们又可以改成这种形式,这样的话,就会有顺序上面的要求,使用index位置属性代替type类型:
结尾的话,就是关于这两种注入方式的比较
如果是对于自己开发的模块的话,建议使用setter注入;
构造器注入与setter注入相比,不如setter注入灵活性强;
好啦!先再见啦!
Spring--依赖注入:setter注入和构造器注入的更多相关文章
- Spring源码学习笔记9——构造器注入及其循环依赖
Spring源码学习笔记9--构造器注入及其循环依赖 一丶前言 前面我们分析了spring基于字段的和基于set方法注入的原理,但是没有分析第二常用的注入方式(构造器注入)(第一常用字段注入),并且在 ...
- Spring入门(2)-通过构造器注入Bean
Spring入门(2)-通过构造器注入Bean 前一篇文章将了最基本的spring例子,这篇文章中,介绍一下带有参数的构造函数和通过构造器注入对象引用. 0. 目录 带有参数的构造函数 通过构造器注入 ...
- Java开发学习(六)----DI依赖注入之setter及构造器注入解析
一.DI依赖注入 首先来介绍下Spring中有哪些注入方式? 我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set方法) 构造方法 依赖注入描述了在容器中建立bean与bean之间的依赖关 ...
- 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?
你两种依赖方式都可以使用,构造器注入和Setter方法注入.最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖.
- Spring依赖注入
依赖注入: 使用构造器注入 使用属性setter方法注入 使用Field注入(用于注解方式) 注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员 ...
- 浅谈spring为什么推荐使用构造器注入
转载自: https://www.cnblogs.com/joemsu/p/7688307.html 一.前言 Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversi ...
- [学习笔记]Spring依赖注入
依赖: 典型的企业应用程序不可能由单个对象(在spring中,也可称之bean)组成,再简单的应用也是由几个对象相互配合工作的,这一章主要介绍bean的定义以及bean之间的相互协作. 依赖注入: s ...
- spring 依赖注入的3种方式
在实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应的资源查找回来:另一类则是依赖注入,而Spring主要使用的是依赖注入.一般而言,依赖注入可以分为3种方式 ...
- Bean的构造器注入和setter注入
链接:https://pan.baidu.com/s/1vixLrr8harzZMwLsIB1Mwg 提取码:ou1n 首先要明白,为什么要注入? IOC容器会在初始化时,创建好所有的bean对象的实 ...
- Spring中为什么不建议使用字段注入
在使用Idea中通过注解注入字段时是否遇见过这样一个提示: Field injection is not recommended(不推荐使用字段注入) 一. 什么是字段注入,Spring中依赖注入的方 ...
随机推荐
- java中获取指定日期是周几
可以使用Calendar日历工具类获取,代码如下: Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); ...
- 手动实现IOC
spring官方实现的ioc是通过反射和xml技术实现的,下面我们可以根据这个思路简单实现一下IOC,此处省略构建项目,项目的整体结构如图 第一步,在resources目录下创建beans.xml文件 ...
- S家lic
1,用1patch里对应的工具patch 2019的s家的工具2,用ocad里的lmgrd和snpslmd替换s家的scl里的3,用scl_keygen产生license,再用fix.bat,添加si ...
- MySQL单表存储上限
-------------- mysql的上限不是单纯的根据内容的大小决定的.跟数据的条数也有关系. 可以把mysql理解成一个服务器.处理数据的通道的流量有限.(这段瞎编的) MySQL本身并没有对 ...
- https://ghproxy.com/ 下载代理
https://github.com/microsoft/PowerToys/releases/tag/v0.58.0 https://github.com/jgraph/drawio-desktop ...
- 基于rabbitmq之MQTT协议的智能家居
智能家居项目 智能可燃气体报警器 产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值,报警器检测到并上传气体浓度值给后台,后台以电话.短信.微信等方式,提醒用户家中可能有气体泄漏. 用户还可能 ...
- git常用命令查询手册
默认已经连接到远程仓库的情况下 本地文件夹初始化成git仓库.提交本地仓库并添加注释 git init git add 文件1(文件夹1) 文件2(文件夹2)... git commit -m &qu ...
- Linux 使用Bind提供域名解析服务
DNS域名解析服务 相较于由数字构成的IP地址,域名更容易被理解和记忆,所以我们通常更习惯通过域名的方式来访问网络中的资源.但是,网络中的计算机之间只能基于IP地址来相互识别对方的身份,而且要想在互联 ...
- NOI模板复习组——图论部分
1.最小生成树: kruscal: #include <cstdio> #include <cmath> #include <cstring> #include & ...
- oracle修改表中的列
declare v_Count1 int := 0; v_Count2 int := 0; v_Count3 int := 0; v_Count4 int := 0; v_Count5 int := ...