当容器调用带有一组参数的类构造函数时,基于构造函数的依赖注入就完成了,其中每个参数代表一个对其他类的依赖。

看个例子:

TextEditor的源代码:

public class TextEditor {private SpellChecker spellChecker;public TextEditor(SpellChecker spellChecker) {System.out.println("Inside TextEditor constructor." );this.spellChecker = spellChecker;}public void spellCheck() {spellChecker.checkSpelling();}}

TextEditor的构造函数里有一个参数,代表对SpellChecker的依赖。

SpellChecker的源代码:

public class SpellChecker {public SpellChecker(){System.out.println("Inside SpellChecker constructor." );}public void checkSpelling() {System.out.println("Inside checkSpelling." );} }

MainApp.java的内容:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");TextEditor te = (TextEditor) context.getBean("textEditor");te.spellCheck();}
}

Beans.xml的内容:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- Definition for textEditor bean --><bean id="textEditor" class="com.sap.TextEditor"><constructor-arg ref="spellChecker"/></bean><!-- Definition for spellChecker bean --><bean id="spellChecker" class="com.sap.SpellChecker"></bean></beans>

通过构造函数注入依赖的核心是这个标签:

单步调试观察:创建Spring IOC容器:

创建TextEditor bean实例:

检测到构造函数里有一个参数依赖:

依赖于另一个bean:spellChecker

因此SpellChecker实例也被创建出来了:

输出:

Inside SpellChecker constructor.
Inside TextEditor constructor.
Inside checkSpelling.

如果你想要向一个对象传递一个引用,你需要使用 标签的 ref 属性,如果你想要直接传递值,那么你应该使用如上所示的 value 属性。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

Spring 基于构造函数的依赖注入相关推荐

  1. Spring 控制反转和依赖注入简介

    文章目录 1.介绍 2.什么是控制反转? 3.什么是依赖注入? 4.Spring IoC 容器 5.基于构造函数的依赖注入 6.基于Setter的依赖注入 7.基于字段的依赖注入 8.自动装配依赖 9 ...

  2. Spring Bean 装配和依赖注入

    Spring IOC 容器的依赖注入工作可以分为两个阶段.第一个阶段可以认为是构建和收集 Bean 定义的阶段,在这个阶段中,我们可以通过 xml 或者 Java 代码的方式定义一些 Bean,然后通 ...

  3. Spring 的控制反转/依赖注入

    第一章 Spring 的控制反转/依赖注入 回顾 增删改查. 课前测: 本章内容 spring:春天 IOC:将创建对象的权力交给 spring 核心容器去控制.工厂模式 BeanFactory: 懒 ...

  4. 零配置 之 Spring 注解实现Bean依赖注入

    转载自  [第十二章]零配置 之 12.2 注解实现Bean依赖注入 --跟我学spring3 12.2  注解实现Bean依赖注入 12.2.1  概述 注解实现Bean配置主要用来进行如依赖注入. ...

  5. Spring IOC容器的依赖注入流程(收集和注册、分析和组装)

    Spring IOC容器的依赖注入流程 Spring IOC容器的依赖注入工作可以分为两个阶段: 阶段一:收集和注册 第一个阶段可以认为是构建和收集bean定义的阶段,在这个阶段中,我们可以通过XML ...

  6. 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  7. Spring的核心机制依赖注入简介

    Spring能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的管理下有机地协调.运行.Spring将各层的 ...

  8. Spring(二)--------Spring配置、DI依赖注入、Bean自动装配

    Spring(二)--------Spring配置.DI依赖注入.Bean自动装配 5.Spring配置 5.1 别名 设置别名:第一种方式alias <!--其中name为ID的对应值--&g ...

  9. 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)...

    前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱.所以需要继续加强. 这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说 ...

最新文章

  1. linux 查看服务器序列号(S/N)
  2. java addlistener_Java怎样监听文本//比如下面 y.addInputMethodListener((InputMethodListener) this);...
  3. 使用dshow抓取摄像头数据时,回调函数时间为0的问题
  4. 怎么用计算机计算年月份,如何使用Excel计算两个日期之间的月数?
  5. Eclipse添加JDK源码
  6. vue+node全栈移动商城【6】-node接口配置文件
  7. “智慧感控”理念革新医疗管理
  8. 一张图看懂字节跳动8年创业史,太励志了吧
  9. netty中的websocket
  10. mac怎么查node版本_Node.js 微服务实践:基于容器的一站式命令行工具链
  11. 管理docker容器
  12. Delphi的Hint(2)
  13. 谈谈JProfiler的实现原理
  14. 智能控制导论 # 模糊控制 2 模糊控制器的原理与设计方法
  15. vue移动端UI组件
  16. 批处理QQ音乐生成的文件名
  17. Python学习笔记-2017.5.4thon学习笔记-2017.5.14
  18. python --opencv图像处理轮廓(寻找轮廓、绘制轮廓)详解
  19. 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
  20. 【FFMPEG】I,P,B帧和PTS,DTS时间戳的关系

热门文章

  1. SQL2005备份集中的数据库备份与现有的数据库不同,错误号码:3154,解决方法...
  2. go语言编程小游戏--贪吃蛇
  3. [ 转载 ] [经典排序算法][集锦]
  4. 学习 shell —— 编写基本脚本
  5. 局域共享解决——用户账户限制,可能的原因包括不允许空密码,登录时间限制...
  6. 反射,hashlib模块,正则匹配,冒泡,选择,插入排序
  7. java基础之java中的基本数据类型
  8. linux 备份svn
  9. UVa 489 - Hangman Judge
  10. vue+xterm.js 实现Linux command界面