基于构造函数的依赖注入

我们知道,bean标签中指定的类会进行初始化,这个初始化过程中自然会调用构造函数,那我们也可以利用这个构造函数完成依赖注入。

先创建一个类:

public class TextEditor {
public TextEditor(SpellChecker spellChecker) {
System.out.println("TextEditor的构造函数");
} public TextEditor(String s) {
System.out.println(s);
}
}

如上,可以看见有两个构造函数。

第一个构造函数的参数是自定义类型,第二个是一个字符串类型。两种不同的参数类型在配置文件中的写法是不一样的,下面会提到。

再创建一个测试类:

public class MainApps {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
TextEditor editor = (TextEditor) context.getBean("text");
}
}

配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">
<constructor-arg type="java.lang.String" value="这是一个构造函数注入的值"/>
</bean>

配置文件中,除了常见的bean标签,需要使用constructor-arg标签来完成构造函数的注入。

运行测试类输出:

这是一个构造函数注入的值

如果向调用上面一个构造函数,配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">
  <constructor-arg ref="spellChecker"/>
</bean>
<bean id="spellChecker" class="Dependency.injection.SpellChecker"/>

注意:

1.如果你需要传递一个对象的引用,就直接用ref;如果你需要传递一个java自带的数据类型,则需要先在type里声明类型,再用value设置值。

2.如果构造参数的参数列表有多个参数,则传递的顺序就是参数列表的顺序。

基于设值函数的依赖注入

通过bean调用设值函数来完成依赖注入。

先准备一个类:

public class TextEditor {
private String name;
//设值函数
public void setName(String name) {
this.name = name;
} public void getName() {
System.out.println(this.name);
} }

注意私有属性name,下面会通过bean设置这个属性的值。

再准备一个测试类:

public class MainApps {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
TextEditor editor = (TextEditor) context.getBean("text");
editor.getName();
}
}

配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">
  <property name="name" value="李四"/>
</bean>

运行测试类输出:

李四

注意:

1.设值函数也可以传递引用,同样使用ref。

2.配置文件中,设值函数用的是property。构造函数注入用的是constructor-arg

Spring基于构造函数和设值函数的依赖注入的更多相关文章

  1. Spring 依赖注入 基于构造函数、设值函数、内部Beans、集合注入

    Spring 基于构造函数的依赖注入_w3cschool https://www.w3cschool.cn/wkspring/t7n41mm7.html Spring 基于构造函数的依赖注入 当容器调 ...

  2. Spring 基于设值函数(setter方法)的依赖注入

    当容器调用一个无参的构造函数或一个无参的静态 factory 方法来初始化你的 bean 后,通过容器在你的 bean 上调用设值函数,基于设值函数的 DI 就完成了. 下述例子显示了一个类 Text ...

  3. Spring-基于设置函数的依赖注入

    Spring 基于设置函数的依赖注入 当容器调用一个无参的构造函数或一个无参的静态factory方法来初始化你的bean后,通过容器在你的bean上调用设值函数,基于设值函数的DI就完成了. 下面是T ...

  4. Spring专题2: DI,IOC 控制反转和依赖注入

    合集目录 Spring专题2: DI,IOC 控制反转和依赖注入 https://docs.spring.io/spring/docs/2.5.x/reference/aop.html https:/ ...

  5. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  6. Spring基于Setter函数的依赖注入(DI)

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/dependency-injection/spring-setter-based-dependenc ...

  7. Spring接口编程_设值注入和构造注入

    说明: UserManagerImp是设值注入,UserManagerImp2是构造注入 接口不注入,也就是在Spring配置文件中没有接口的<bean>,但是定义的时候是用接口 priv ...

  8. 【Spring实战】—— 5 设值注入

    本篇主要讲解了Spring的最常用的功能——依赖注入. 注入的方式,是使用Getter Setter注入,平时大多的编程也都是使用这种方法. 举个简单的例子,还是表演者. 表演者有自己的属性,年龄或者 ...

  9. Spring基于构造函数的依赖注入(DI)

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/dependency-injection/spring-constructor-based-depe ...

随机推荐

  1. Hive On HBase实战

    1.概述 HBase是一款非关系型.分布式的KV存储数据库.用来存储海量的数据,用于键值对操作.目前HBase是原生是不包含SQL操作,虽然说Apache Phoenix可以用来操作HBase表,但是 ...

  2. Java匹马行天下之新手学习目录

    Java匹马行天下之新手学习目录 学习路线 [Java匹马行天下——Java学习路线] [Java匹马行天下——开篇学习计划] 基础篇 [Java匹马行天下之学编程的起点——编程常识知多少] [Jav ...

  3. Shiro learning - 入门学习 Shiro中的基础知识(1)

    Shiro入门学习 一 .什么是Shiro? 看一下官网对于 what is Shiro ? 的解释 Apache Shiro (pronounced “shee-roh”, the Japanese ...

  4. Nginx 了解一下?

    这篇文章主要简单的介绍下 Nginx 的相关知识,主要包括以下几部分内容: Nginx 适用于哪些场景? 为什么会出现 Nginx? Nginx 优点 Nginx 的编译与配置 Nginx 适用于哪些 ...

  5. ARM、X86和AI处理器的区别

    ARM.X86和AI处理器的区别 目前主要的处理器架构有: X86: Intel, AMD, 海光, 兆芯 ARM: 华为,飞腾,华芯通,Cavium,Ampere,富士通,亚马逊 POWER:IBM ...

  6. ES6---变量解构赋值

    1.数组的解构赋值 1.1 基本用法 解构赋值:在ES6中 ,按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构赋值.本质:这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量 ...

  7. fenby C语言 P29

    野指针 malloc()分配内存: free()释放内存: p=(char*)malloc(100): #include <stdio.h>#include <stdlib.h> ...

  8. 一个漂亮的js表单验证页面+验证码

    一个漂亮的js表单验证页面 见图知其意, 主要特性 带密码安全系数的判断 其他的就没有啥啦 嘿嘿嘿 当然,其代码也在Github上 我也准备了一套可以直接Ctrl + v; Ctrl + c 运行的代 ...

  9. 使用grep过滤make的输出内容

    make的输出内容其实分为两种,有些是到标准输出,有些是到标准错误,由于标准输出和标准错误默认都是屏幕,所以平时区分不出来, 实际上一般是error和warning信息到标准错误,其余的到标准输出. ...

  10. python解释器执行文件的流程

    一: 启动python解释器,加载内置模块. 找到主文件读入内存,这里涉及到编码问题,一般都是utf8 解释器拿到主文件开始语法词法分析,编译然后执行