【Spring笔记03】Spring依赖注入各种数据类型 | 您所在的位置:网站首页 › spring支持什么类型的依赖注入 › 【Spring笔记03】Spring依赖注入各种数据类型 |
这篇文章,详细介绍一下Spring框架中如何注入各种数据类型,包含:注入基本数据类型、数组、集合、Map映射、Property属性、注入空字符串、注入null值、注入特殊字符等内容,以及如何使用命名空间进行依赖注入。 目录 一、注入各种数据类型 1.1、注入基本类型 1.2、注入Bean对象 (1)外部注入Bean方式 (2)内部注入Bean方式 1.3、注入数组 1.4、注入List集合 1.5、注入Set集合 1.6、注入Map 1.7、注入Property属性 1.8、注入null值和空值 1.9、注入特殊字符 二、命名空间 2.1、p命名空间 2.2、c命名空间 2.3、util命名空间 一、注入各种数据类型 1.1、注入基本类型注入基本数据类型,既可以采用setter方法注入,也可以采用构造方法注入,两种方式都有不同的限制条件: setter方法注入:必须确保注入的属性存在setXXX()方法,否则注入失败。构造方法注入:必须确保Bean对象具有相应的有参构造方法,否则注入失败。这里我以setter方法注入为案例: 以上,就是setter方法注入的用法,只要在Spring的XML配置文件里面采用【】标签,指定属性名称和属性值就可以啦。 1.2、注入Bean对象在实际开发过程中,我们一个类里面会用到另外一个类的对象,这个时候就是注入引用对象类型,也就是我们说的Bean对象。注入Bean对象,首先需要确保Bean对象已经被实例化了,然后另外一个Bean里面才能够注入。 注入Bean分为两种: 外部注入Bean方式内部注入Bean方式 (1)外部注入Bean方式外部注入Bean方式,是指:A类中使用了B类的对象,那么首先需要将B类对象进行实例化,然后A类直接引用B类实例化之后的对象。 这里举个栗子,员工和部门的关系,我们就可以两个类来表示,一个是【Emp】员工类,另外一个是【Dept】部门类,案例代码如下所示: 创建【Dept】类: public class Dept { private Integer deptId; private String deptName; public Integer getDeptId() { return deptId; } public void setDeptId(Integer deptId) { this.deptId = deptId; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } }创建【Emp】类: public class Emp { private Integer empId; private String empName; private Dept dept; // 部门类的对象 public Integer getEmpId() { return empId; } public void setEmpId(Integer empId) { this.empId = empId; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } public Dept getDept() { return dept; } public void setDept(Dept dept) { this.dept = dept; } }添加XML配置 我们把这种直接引用外部Bean的方式,叫做注入外部Bean。 可以发现,我们这里使用的【】标签是通过【ref】属性进行注入Bean的,而不是【value】属性,相信你应该知道这两个的区别了吧。 value属性:用于注入基本数据类型、字符串之类的。ref属性:用于引用另外一个Bean的实例对象。 (2)内部注入Bean方式外部注入Bean方式是引用外部的一个Bean实例,那内部注入Bean就是不引用外部的Bean呗,而是直接在当前的Bean里面进行实例化。 具体XML配置如下所示: 是不是很简单,内部注入bean其实就是把另外一个bean的配置移到【】标签之间。 1.3、注入数组如果类中的某个属性是数组,那就不能和之前一样编写了,因为之前的都是注入单独一个的值,而数组可以有多个值,那么如何注入数组呢??? 注入数组,可以借助【】标签,看个案例就知道啦。 采用【】标签告诉Spring,当前这个属性是数组类型的,通过【】标签,告诉Spring数组里面的数值是哪些。 1.4、注入List集合注入集合和注入数组类似的,只不过注入List集合是采用【】标签进行标识。 张三 李四 王五 1.5、注入Set集合注入Set集合是采用【】标签进行标识。 张三 李四 王五 1.6、注入Map注入map比较特殊,因为map和List、Set集合不同,map是具有key-value形式的数据,所以注入map集合,需要采用【】标签定义,然后通过【】标签进行取值。 【】标签具有如下属性: key属性:指定map集合的key值。value属性:指定map集合的value值。ref属性:指定map集合的value值(引用另外一个bean对象)。key-ref属性:key值引用另外一个Bean对象。value-ref属性:value值引用另外一个Bean对象。具体案例代码如下所示: 1.7、注入Property属性Property是HashMap的一个子类,它也是满足key-value形式的数据集合,通过【】标签定义,然后采用【】标签进行key和value的赋值。另外,还可以读取外部的【property】文件的内容进行注入。 注入Property属性案例: Tom Jerry Jack如何定义Property文件??? 首先需要创建一个以【.properties】为后缀的文件。 然后在文件中,通过【key=value】的格式,编写对应的数据内容。 注意:一行只能编写一个【key=value】。 从Property文件读取属性案例: 在【src/main/resources】目录下,创建一个【jdbc.properties】文件 driver=com.jdbc.mysql.Driver url=jdbc:mysql://localhost:3306/test username=root password=root 创建【JdbcProperties】类 public class JdbcProperties { private String driver; private String url; private String username; private String password; // setter and getter } XML配置文件中添加context命名空间注入属性 Tom Jerry Jack以上,就是注入Property类型。 1.8、注入null值和空值如何注入null值呢???通过【】标签即可注入null值。 如何注入空字符串呢???直接设置【value】属性等于空即可。 1.9、注入特殊字符在XML文件里面,有时候注入的值存在一些特殊字符(例如:符号),此时XML文件会解析失败,因为(符号)是XML文件规定的标签开始结束标记,我们不能在注入的值里面使用???那要如何解决这个问题呢??? 解决办法: 可以采用【】标签进行转义,这是CDATA是XML规范提供的。举例如下: 以上,就是注入特殊字符的方式。 二、命名空间从第一部分,我们学习了各种数据类型的注入方式,可以看到,每次我们注入一个属性的时候,都需要编写很多的【】标签,很明显,太麻烦了,所以Spring也支持通过命名空间的方式简写注入。下面介绍一下Spring注入的一些命名空间简写方式。 2.1、p命名空间这里说的【p命名空间】是用于简写【】标签注入,使用命名空间,首先需要在XML配置文件里面添加命名空间前缀。 添加【p命名空间】前缀 需要添加【xmlns:p】开头的前缀。p命名空间使用案例 上面,可以看到我们只需要在【】标签里面,采用【p:属性名称】的方式就可以实现注入,而不需要编写【】标签。 2.2、c命名空间这里说的【c命名空间】是用于简写【】标签注入。 添加【c命名空间】前缀 需要添加【xmlns:c】开头的前缀。c命名空间使用 【c命名空间】是构造方法注入的简写,可以两种方式: 根据参数位置注入:【c:_下标位置】根据参数名称注入:【c:属性名称】 2.3、util命名空间util命名空间,可以将注入集合的那些部分提取出一个公共内容,然后其他地方需要注入的时候,就可以直接引用,而不需要重复的编写。 添加【util命名空间】前缀 需要添加【xmlns:util】开头的前缀。util命名空间的使用 util命名空间,常用的有如下几个: 【】、【】、【】、【】 综上,这篇文章,详细介绍一下Spring框架中如何注入各种数据类型,包含:注入基本数据类型、数组、集合、Map映射、Property属性、注入空字符串、注入null值、注入特殊字符等内容,以及如何使用命名空间进行依赖注入。 |
CopyRight 2018-2019 实验室设备网 版权所有 |