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 ...
随机推荐
- 深入理解大数据架构之——Lambda架构
目录 传统系统的问题 Lambda架构简介 Lambda架构关键特性 数据系统的本质 Lambda的三层架构 Lambda架构组件选型 总结 原文链接:https://jiang-hao.com/ar ...
- Vue入坑第一篇
写在前面的话:文章是个人学习过程中的总结,为方便以后回头在学习.文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. 一.前言 本篇作为vue入门的一 ...
- fastfdfs上传代码
//上传到FDFS //获取后缀名 String extension = StringUtils.substringAfterLast(file.getOriginalFilename()," ...
- SpringCloud之Hystrix-Dashboard监控,以及踩的坑...
前言: 最近刚入职,公司使用了SpringCloud,之前有了解过SpringCloud,但是长时间不去搭建不去使用很容易就忘了,因此空闲时间重新复习一下SpringCloud.但是之前开的Sprin ...
- Java面试官最爱问的volatile关键字
在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用 ...
- Web for pentester_writeup之SQL injections篇
Web for pentester_writeup之SQL injections篇 SQL injections(SQL注入) Example 1 测试参数,添加 and '1'='1, 'and ' ...
- 入职第一天,装环境 .Ubuntu装jdk1.8,装idea 及tomcat
入职第一天,和之前公司的开发环境感觉天壤之别了,不过万变不离其宗,之前公司eclipse+widows.所以很少玩linux了.今天来就干了一件事.装环境 jdk安装. 下载地址:https://ww ...
- C++学习笔记14_C#调用dll
1. 首先C++创建dll项目,各种调第三方库,把这些东西都弄好后,整一个导出接口,例如: extern "C" __declspec(dllexport) int Add(int ...
- WebGL简易教程(十二):包围球与投影
目录 1. 概述 2. 实现详解 3. 具体代码 4. 参考 1. 概述 在之前的教程中,都是通过物体的包围盒来设置模型视图投影矩阵(MVP矩阵),来确定物体合适的位置的.但是在很多情况下,使用包围盒 ...
- AtCoder Grand Contest 038
目录 \(\bf A - 01 \ Matrix\) \(\bf B- Sorting \ a \ Segment\) \(\bf C-LCMs\) \(\bf D-Unique \ Path\) 这 ...