Spring学习--使用 utility scheme 定义集合及 p命名空间
util schema 定义集合
- 使用基本的集合标签定义集合时 , 不能将集合作为独立的 Bean 定义 , 导致其他 Bean 无法引用该集合 , 所以无法在不同 Bean 之间共享集合。
- 可以用util schema 里的集合标签定义独立的集合 Bean。 需要注意的是 , 必须在 <beans> 根元素里添加 util schema 定义(xmlns:util="http://www.springframework.org/schema/util)。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:util="http://www.springframework.org/schema/util" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 6 7 8 <bean id="person3" class="com.itdjx.spring.dependency.injection.Person"> 9 <property name="name" value="李玉"/> 10 <property name="age" value="23"/> 11 <property name="sex" value="女"/> 12 <property name="cars" ref="list"/> 13 </bean> 14 15 <util:list id="list"> 16 <ref bean="car"/> 17 <ref bean="car2"/> 18 <ref bean="car3"/> 19 <ref bean="car4"/> 20 </util:list> 21 22 23 <bean id="car" class="com.itdjx.spring.dependency.injection.Car"> 24 <constructor-arg value="BaoMa"/> 25 <constructor-arg value="HuaChen"/> 26 <constructor-arg value="230000"/> 27 </bean> 28 29 <bean id="car2" class="com.itdjx.spring.dependency.injection.Car"> 30 <constructor-arg value="BaoMa" index="0"/> 31 <constructor-arg value="HuaChen" index="1"/> 32 <constructor-arg value="230000" index="2"/> 33 </bean> 34 35 <bean id="car3" class="com.itdjx.spring.dependency.injection.Car"> 36 <constructor-arg value="BaoMa" index="0"/> 37 <constructor-arg value="HuaChen" index="1"/> 38 <constructor-arg value="230000" index="2" type="double"/> 39 </bean> 40 41 <bean id="car4" class="com.itdjx.spring.dependency.injection.Car"> 42 <constructor-arg value="BaoMa" index="0"/> 43 <constructor-arg value="HuaChen" index="1"/> 44 <constructor-arg value="230" type="int"/> 45 </bean> 46 47 </beans>
1 package com.itdjx.spring.dependency.injection; 2 3 /** 4 * 构造器注入 5 * 6 * @author Wáng Chéng Dá 7 * @create 2017-02-28 15:32 8 */ 9 public class Car { 10 11 private String brand; 12 13 private String address; 14 15 private double price; 16 17 private int maxSpeed; 18 19 20 public Car(String brand, String address, double price) { 21 this.brand = brand; 22 this.address = address; 23 this.price = price; 24 } 25 26 public Car(String brand, String address, int maxSpeed) { 27 this.brand = brand; 28 this.address = address; 29 this.maxSpeed = maxSpeed; 30 } 31 32 public Car(String brand, double price, int maxSpeed) { 33 this.brand = brand; 34 this.price = price; 35 this.maxSpeed = maxSpeed; 36 } 37 38 public Car() { 39 } 40 41 public String getBrand() { 42 return brand; 43 } 44 45 public void setBrand(String brand) { 46 this.brand = brand; 47 } 48 49 public String getAddress() { 50 return address; 51 } 52 53 public void setAddress(String address) { 54 this.address = address; 55 } 56 57 public double getPrice() { 58 return price; 59 } 60 61 public void setPrice(double price) { 62 this.price = price; 63 } 64 65 public int getMaxSpeed() { 66 return maxSpeed; 67 } 68 69 public void setMaxSpeed(int maxSpeed) { 70 this.maxSpeed = maxSpeed; 71 } 72 73 @Override 74 public String toString() { 75 return "Car{" + 76 "brand='" + brand + '\'' + 77 ", address='" + address + '\'' + 78 ", price=" + price + 79 ", maxSpeed=" + maxSpeed + 80 '}'; 81 } 82 }
1 package com.itdjx.spring.dependency.injection; 2 3 import java.util.List; 4 5 /** 6 * 属性注入 7 * 8 * @author Wáng Chéng Dá 9 * @create 2017-02-28 15:14 10 */ 11 public class Person { 12 13 private String name; 14 15 private String sex; 16 17 private int age; 18 19 private List<Car> cars; 20 21 public String getName() { 22 return name; 23 } 24 25 public void setName(String name) { 26 this.name = name; 27 } 28 29 public String getSex() { 30 return sex; 31 } 32 33 public void setSex(String sex) { 34 this.sex = sex; 35 } 36 37 public int getAge() { 38 return age; 39 } 40 41 public void setAge(int age) { 42 this.age = age; 43 } 44 45 public List<Car> getCars() { 46 return cars; 47 } 48 49 public void setCars(List<Car> cars) { 50 this.cars = cars; 51 } 52 53 @Override 54 public String toString() { 55 return "Person{" + 56 "name='" + name + '\'' + 57 ", sex='" + sex + '\'' + 58 ", age=" + age + 59 ", cars=" + cars + 60 '}'; 61 } 62 }
1 package com.itdjx.spring.dependency.injection; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 /** 7 * 依赖注入main 8 * 9 * @author Wáng Chéng Dá 10 * @create 2017-02-28 15:16 11 */ 12 public class MainIOC { 13 14 public static void main(String[] args) { 15 ApplicationContext app = new ClassPathXmlApplicationContext("applicationConfig.xml"); 16 Person person = (Person) app.getBean("person3"); 17 System.out.println(person); 18 System.out.println("----------------------"); 19 20 } 21 }
控制台输出:
Person{name='李玉', sex='女', age=23, cars=[Car{brand='BaoMa', address='HuaChen', price=0.0, maxSpeed=230000}, Car{brand='BaoMa', address='HuaChen', price=0.0, maxSpeed=230000}, Car{brand='BaoMa', address='HuaChen', price=230000.0, maxSpeed=0}, Car{brand='BaoMa', address='HuaChen', price=0.0, maxSpeed=230}]} |
定义 <util:list> 标签必须在 <beans> 根元素中先引入 util 命名空间。
xsi:是成对出现的 , xmlns:util="http://www.springframework.org/schema/util xmlns:util="http://www.springframework.org/schema/util/spring-util.xsd
格式为:url 空格 url/spring-命名空间名.xsd
若不引入 xsi 中地址会运行异常:
Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from class path resource [applicationConfig.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 26; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 'util:list' 的声明。 |
p 命名空间
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:util="http://www.springframework.org/schema/util" 5 xmlns:p="http://www.springframework.org/schema/p" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 8 9 10 <bean id="person3" class="com.itdjx.spring.dependency.injection.Person" p:name="李玉" p:age="23" p:sex="女" p:cars-ref="list"/> 11 12 <util:list id="list"> 13 <ref bean="car"/> 14 <ref bean="car2"/> 15 <ref bean="car3"/> 16 <ref bean="car4"/> 17 </util:list> 18 19 20 <bean id="car" class="com.itdjx.spring.dependency.injection.Car"> 21 <constructor-arg value="BaoMa"/> 22 <constructor-arg value="HuaChen"/> 23 <constructor-arg value="230000"/> 24 </bean> 25 26 <bean id="car2" class="com.itdjx.spring.dependency.injection.Car"> 27 <constructor-arg value="BaoMa" index="0"/> 28 <constructor-arg value="HuaChen" index="1"/> 29 <constructor-arg value="230000" index="2"/> 30 </bean> 31 32 <bean id="car3" class="com.itdjx.spring.dependency.injection.Car"> 33 <constructor-arg value="BaoMa" index="0"/> 34 <constructor-arg value="HuaChen" index="1"/> 35 <constructor-arg value="230000" index="2" type="double"/> 36 </bean> 37 38 <bean id="car4" class="com.itdjx.spring.dependency.injection.Car"> 39 <constructor-arg value="BaoMa" index="0"/> 40 <constructor-arg value="HuaChen" index="1"/> 41 <constructor-arg value="230" type="int"/> 42 </bean> 43 44 </beans>
控制台输出:
Person{name='李玉', sex='女', age=23, cars=[Car{brand='BaoMa', address='HuaChen', price=0.0, maxSpeed=230000}, Car{brand='BaoMa', address='HuaChen', price=0.0, maxSpeed=230000}, Car{brand='BaoMa', address='HuaChen', price=230000.0, maxSpeed=0}, Car{brand='BaoMa', address='HuaChen', price=0.0, maxSpeed=230}]} |