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中依赖注入的方 ...
随机推荐
- pg数组类型
数据库版本 postgres=# SELECT version(); version---------------------------------------------------------- ...
- flutter-android
多端开发框架 含义:通过一套代码编译成在 H5/微信小程序/React Native/百度小程序/支付宝小程序等端运行的代码. 技术简介:Taro,uniapp Taro是一个开放式跨端跨框架解决方案 ...
- python菜鸟学习: 8. 集合基础知识
# -*- coding: utf-8 -*-# 列表的特性:1,去重:2.关系测试list1 = [1, 4, 6, 8, 7, 8, 9]# 集合去重list2 = set(list1)print ...
- Android 系统完整的权限列表
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.perm ...
- 解决tomcat8080端口占用问题
解决tomcat8080端口占用问题 1. 使用管理员权限打开cmd 2. 输入 netstat -ano | findstr 8080 找出占用8080端口的进程pid netstat -ano | ...
- jmeter支持发送https请求
示例网址: https://passport.damai.cn/login 一.Jmeter如何导入SSL证书 步骤1.打开Chrome浏览器访问地址,点击安全锁,导出证书,并复制文件至指定文件目录. ...
- AutoCAD_2020_Simplified_Chinese_Win_64bit_dlm
「AutoCAD_2020_Simplified_Chinese_Win_64bit_dlm」https://www.aliyundrive.com/s/zN8zAGgXZ58 点击链接保存,或者复制 ...
- Spring系列之面向切面编程-15
目录 AOP 概念 AOP 代理 @AspectJ 支持 启用@AspectJ 支持 使用 Java 配置启用 @AspectJ 支持 通过 XML 配置启用 @AspectJ 支持 声明一个方面 声 ...
- echarts属性大全
// 全图默认背景 // backgroundColor: 'rgba(0,0,0,0)', // 默认色板 color: ['#ff7f50','#87cefa','#da70d6','#32cd ...
- js中的占位函数
String.prototype.signMix= function() { if(arguments.length === 0) return this; var param = arguments ...