Spring基于构造函数和设值函数的依赖注入
基于构造函数的依赖注入
我们知道,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基于构造函数和设值函数的依赖注入的更多相关文章
- Spring 依赖注入 基于构造函数、设值函数、内部Beans、集合注入
Spring 基于构造函数的依赖注入_w3cschool https://www.w3cschool.cn/wkspring/t7n41mm7.html Spring 基于构造函数的依赖注入 当容器调 ...
- Spring 基于设值函数(setter方法)的依赖注入
当容器调用一个无参的构造函数或一个无参的静态 factory 方法来初始化你的 bean 后,通过容器在你的 bean 上调用设值函数,基于设值函数的 DI 就完成了. 下述例子显示了一个类 Text ...
- Spring-基于设置函数的依赖注入
Spring 基于设置函数的依赖注入 当容器调用一个无参的构造函数或一个无参的静态factory方法来初始化你的bean后,通过容器在你的bean上调用设值函数,基于设值函数的DI就完成了. 下面是T ...
- Spring专题2: DI,IOC 控制反转和依赖注入
合集目录 Spring专题2: DI,IOC 控制反转和依赖注入 https://docs.spring.io/spring/docs/2.5.x/reference/aop.html https:/ ...
- Spring的控制反转(IOC)和依赖注入(DI)具体解释
Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...
- Spring基于Setter函数的依赖注入(DI)
以下内容引用自http://wiki.jikexueyuan.com/project/spring/dependency-injection/spring-setter-based-dependenc ...
- Spring接口编程_设值注入和构造注入
说明: UserManagerImp是设值注入,UserManagerImp2是构造注入 接口不注入,也就是在Spring配置文件中没有接口的<bean>,但是定义的时候是用接口 priv ...
- 【Spring实战】—— 5 设值注入
本篇主要讲解了Spring的最常用的功能——依赖注入. 注入的方式,是使用Getter Setter注入,平时大多的编程也都是使用这种方法. 举个简单的例子,还是表演者. 表演者有自己的属性,年龄或者 ...
- Spring基于构造函数的依赖注入(DI)
以下内容引用自http://wiki.jikexueyuan.com/project/spring/dependency-injection/spring-constructor-based-depe ...
随机推荐
- 12.Nginx代理与负载均衡
1.什么是代理? 代为办理 --> 代理 2.Nginx正向代理.反向代理 正向代理: --> 上网 | 路由器替代 反向代理: --> 正向与反向代理的区别: 区别在于形式上服务的 ...
- Python 调用图灵机器人 API
''' Python3''' import requests #导入requests库 import json #导入json库 key = '3119f1e3610f42c5977ea73c4097 ...
- 算法<初级> - 第一章 排序相关问题
算法 - 第一章 时间复杂度: Big O 时间/空间复杂度计算一样,都是跟输入数据源的大小有关 n->∞ O(logn) 每次只使用数据源的一半,logn同理 最优解 先满足时间复杂度的情况最 ...
- PassWord控件
<StackPanel Margin="> <Label>Text:</Label> <TextBox /> <Label>Pas ...
- [NOI2001]食物链(并查集拓展域)&& [HAOI2006]旅行(Kruskal)
题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...
- Python语法入门02
引子 上一篇我们主要了解到了python这门编程语言,今天来说一下关于用户交互,数据类型和运算符方面的学习内容 用户交互 什么是用户交互? 用户交互就是人往计算机里输入数据(input),计算机输出结 ...
- fenby C语言 P23
#include <stdio.h> int main(){ int i,max,a[5]={10,5,20,31,4}; max=a[0]; for(i=0;i<5;i++) if ...
- SSM简历模板1.0
张三 xxx-xxxx-xxxx| xxxxxxx@qq.com| 南京 x岁 | 籍贯:江苏 已离职 | 求职意向:java开发工程师 | 期望薪资:面议 专业技能 1.熟悉MVC体系结构模式.B/ ...
- 5、pytest -- 猴子补丁
目录 1. 修改函数功能或者类属性 2. 修改环境变量 3. 修改字典 有时候,测试用例需要调用某些依赖于全局配置的功能,或者这些功能本身又调用了某些不容易测试的代码(例如:网络接入).fixture ...
- Splash的使用
Splash Lua脚本http://localhost:8050 入口及返回值 function main(splash, args) splash:go("http://www.baid ...