级联属性赋值(了解) 本篇文章说说set注入专题之级联属性赋值,上篇说了set注入专题 https://blog.51cto.com/u_15485663/6132751 配合视频教程观看,更易理解吸收,动力节点老杜的S
级联属性赋值(了解)
本篇文章说说set注入专题之级联属性赋值,上篇说了set注入专题
https://blog.51cto.com/u_15485663/6132751
配合视频教程观看,更易理解吸收,动力节点老杜的Spring6教程采用难度逐步递进的方式,从入门的第一个程序到手写Spring框架,真正的能够让小白成为老手。如果你是老程序员不妨看看手写Spring框架,也会让你受益颇多。
package com.powernode.spring6.beans;/** * @author 动力节点 * @version 1.0 * @className Clazz * @since 1.0 **/public class Clazz { private String name; public Clazz() { } public Clazz(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Clazz{" + "name='" + name + '\'' + '}'; }}package com.powernode.spring6.beans;/** * @author 动力节点 * @version 1.0 * @className Student * @since 1.0 **/public class Student { private String name; private Clazz clazz; public Student() { } public Student(String name, Clazz clazz) { this.name = name; this.clazz = clazz; } public void setName(String name) { this.name = name; } public void setClazz(Clazz clazz) { this.clazz = clazz; } public Clazz getClazz() { return clazz; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", clazz=" + clazz + '}'; }}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="clazzBean" class="com.powernode.spring6.beans.Clazz"/> <bean id="student" class="com.powernode.spring6.beans.Student"> <property name="name" value="张三"/> <!--要点1:以下两行配置的顺序不能颠倒--> <property name="clazz" ref="clazzBean"/> <!--要点2:clazz属性必须有getter方法--> <property name="clazz.name" value="高三一班"/> </bean></beans>@Testpublic void testCascade(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-cascade.xml"); Student student = applicationContext.getBean("student", Student.class); System.out.println(student);}运行结果:
要点:
- 在spring配置文件中,如上,注意顺序。
- 在spring配置文件中,clazz属性必须提供getter方法。
注入数组
当数组中的元素是简单类型:
package com.powernode.spring6.beans;import java.util.Arrays;public class Person { private String[] favariteFoods; public void setFavariteFoods(String[] favariteFoods) { this.favariteFoods = favariteFoods; } @Override public String toString() { return "Person{" + "favariteFoods=" + Arrays.toString(favariteFoods) + '}'; }}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="person" class="com.powernode.spring6.beans.Person"> <property name="favariteFoods"> <array> <value>鸡排</value> <value>汉堡</value> <value>鹅肝</value> </array> </property> </bean></beans>@Testpublic void testArraySimple(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-array-simple.xml"); Person person = applicationContext.getBean("person", Person.class); System.out.println(person);}当数组中的元素是非简单类型:一个订单中包含多个商品。
package com.powernode.spring6.beans;/** * @author 动力节点 * @version 1.0 * @className Goods * @since 1.0 **/public class Goods { private String name; public Goods() { } public Goods(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Goods{" + "name='" + name + '\'' + '}'; }}package com.powernode.spring6.beans;import java.util.Arrays;/** * @author 动力节点 * @version 1.0 * @className Order * @since 1.0 **/public class Order { // 一个订单中有多个商品 private Goods[] goods; public Order() { } public Order(Goods[] goods) { this.goods = goods; } public void setGoods(Goods[] goods) { this.goods = goods; } @Override public String toString() { return "Order{" + "goods=" + Arrays.toString(goods) + '}'; }}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="goods1" class="com.powernode.spring6.beans.Goods"> <property name="name" value="西瓜"/> </bean> <bean id="goods2" class="com.powernode.spring6.beans.Goods"> <property name="name" value="苹果"/> </bean> <bean id="order" class="com.powernode.spring6.beans.Order"> <property name="goods"> <array> <!--这里使用ref标签即可--> <ref bean="goods1"/> <ref bean="goods2"/> </array> </property> </bean></beans>测试程序:
@Testpublic void testArray(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-array.xml"); Order order = applicationContext.getBean("order", Order.class); System.out.println(order);}执行结果:
要点:
- 如果数组中是简单类型,使用value标签。
- 如果数组中是非简单类型,使用ref标签。
注入List集合
List集合:有序可重复
package com.powernode.spring6.beans;import java.util.List;/** * @author 动力节点 * @version 1.0 * @className People * @since 1.0 **/public class People { // 一个人有多个名字 private List<String> names; public void setNames(List<String> names) { this.names = names; } @Override public String toString() { return "People{" + "names=" + names + '}'; }}<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="peopleBean" class="com.powernode.spring6.beans.People"> <property name="names"> <list> <value>铁锤</value> <value>张三</value> <value>张三</value> <value>张三</value> <value>狼</value> </list> </property> </bean></beans>@Testpublic void testCollection(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-collection.xml"); People peopleBean = applicationContext.getBean("peopleBean", People.class); System.out.println(peopleBean);}执行结果:
注意:注入List集合的时候使用list标签,如果List集合中是简单类型使用value标签,反之使用ref标签。