Spring Bean集合注入和自动装配的方法
本篇内容介绍了“Spring Bean集合注入和自动装配的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、Spring Bean 集合注入
在【Spring学习笔记(三)】已经讲了怎么注入基本数据类型和引用数据类型,接下来介绍如何注入比较特殊的数据类型——集合
集合常用标签
集合注入,用法也很简单,只需要在 Bean 标签下的 <property>
或<constructor-arg>
元素中添加以下集合的标签,再通过value或者ref进行属性注入
标签 | 说明 |
---|---|
<list> | 用于注入 list 集合,允许重复 |
<set> | 用于注入 set集合,不允许重复 |
<map> | 用于注入 key-value 的map集合, key 和 value 可以是任意类型 |
<props> | 用于注入 key-value 的properties集合,key 和 value 必须是是字符串类型 |
注意: List的底层也是通过数组实现的,所以<list>
和<array>
标签是可以混用
案例
创建一个Collection类和Dept类,代码如下
public class Collection { //1.数组 private int[] array; //2.list集合 private List<Dept> list; //3。set集合 private Set<Dept> set; //4.map集合 private Map<String, String> map; //5.properties集合 private Properties properties; //打印各个集合 public void fmt() { System.out.println("打印array:" + Arrays.toString(array)); System.out.println("打印List:" + list); System.out.println("打印Set:" + set); System.out.println("打印Map:" + map); System.out.println("打印Properties:" + properties); } -----省略setter方法----- }public class Dept { //部门编号 private int deptNo; //部门名称 private String deptName; @Override public String toString() { return "Dept{" + "deptNo=" + deptNo + ", deptName='" + deptName + '\'' + '}'; } -----省略setter方法----- }
编写spring配置文件
<!--部门类属性注入--><bean id="dept" class="com.bighorn.pojo.Dept"> <property name="deptNo" value="1"/> <property name="deptName" value="后端组"/></bean><!--Collection类属性注入--><bean id="collection" class="com.bighorn.pojo.Collection"> <!--数组类型--> <property name="array"> <array> <value>114514</value> <value>114514</value> <value>114514</value> </array> </property> <!--List 类型--> <property name="list"> <list> <ref bean="dept"/> <ref bean="dept"/> <ref bean="dept"/> </list> </property> <!--Set 类型--> <property name="set"> <set> <ref bean="dept"/> <ref bean="dept"/> <ref bean="dept"/> </set> </property> <!--Map 类型--> <property name="map"> <map> <entry key="name" value="bighorn"/> <entry key="age" value="18"/> <entry key="sex" value="man"/> </map> </property> <!--Properties 类型--> <property name="properties"> <props> <prop key="username">root</prop> <prop key="password">123456</prop> </props> </property></bean>
编写运行程序
public static void main(String[] args) { //获取IoC容器 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //从容器中获取对象 Collection collection = context.getBean("collection", Collection.class); //调用方法打印各个集合 collection.fmt();}
运行结果如下
二、Spring Bean自动装配
Spring 在 Bean 与 Bean 之间建立依赖关系的行为称为 “装配”
Spring Bean 属性注入 前面学习了,在 spring配置文件中通过 <constructor-arg>
和 <property>
中的 ref
属性,手动维护 Bean 与 Bean 之间的依赖关系的,即手动装配
手动装配图
什么是自动装配
如果容器中Bean很多,依赖关系又非常复杂,此时手动装配就略显吃力且繁琐了,所以Spring 框架为我们提供了 “自动装配” 功能,提高开发效率。
Spring 自动装配:Spring IoC容器
根据自动装配方式,为指定的 Bean 从应用上下文(AppplicationContext 容器
)自动查找并自动注入它所依赖的 Bean。
自动装配的方式
Spring 默认不支持自动装配的。使用自动装配,则需要对 Spring XML 配置文件中 <bean> 元素的 autowire 属性进行设置,此时就不需要ref属性了。
属性值 | 说明 |
---|---|
byName | 按名称自动装配。 Bean 的 id 或 name 属性值与这个对象属性的名称相同 |
byType | 按类型自动装配。 Bean 的 class 属性值与这个对象属性的类型相匹配 |
constructor | 按构造器参数自动装配。 |
default | 默认采用上一级元素 <beans> 设置的自动装配方式(default-autowire)进行装配。 |
no | 默认值,表示不使用自动装配。 |
案例
创建员工类Employee和部门类Dept,添加各个成员变量的setter方法
public class Employee { //员工编号 private String empNo; //员工姓名 private String empName; //部门信息 private Dept dept; //各个属性的setter方法 public void setEmpNo(int empNo) { this.empNo = empNo; } public void setEmpName(String empName) { this.empName = empName; } public void setDept(Dept dept) { this.dept = dept; } ----省略toString方法------ }public class Dept { //部门编号 private String deptNo; //部门名称 private String deptName; //各个属性的setter方法 public void setDeptNo(int deptNo) { this.deptNo = deptNo; } public void setDeptName(String deptName) { this.deptName = deptName; } ----省略toString方法------}
编写spring配置文件
<!--部门类属性注入--><bean id="dept" class="com.bighorn.pojo.Dept"> <property name="deptNo" value="2"/> <property name="deptName" value="前端组"/></bean><!--员工类属性注入--><bean id="employee" class="com.bighorn.pojo.Employee" autowire="byType"> <property name="empNo" value="114514"/> <property name="empName" value="lzh"/></bean>
编写运行程序
public static void main(String[] args) { //获取IoC容器 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //从容器中获取对象 Employee employee = context.getBean("employee", Employee.class); System.out.println(employee);}
结果如下图
注意点
自动装配用于引用类型依赖注入,不能对简单类型进行操作
使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
“Spring Bean集合注入和自动装配的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341