Spring学习--使用 utility scheme 定义集合及 p命名空间

util schema 定义集合

  1. 使用基本的集合标签定义集合时 , 不能将集合作为独立的 Bean 定义 , 导致其他 Bean 无法引用该集合 , 所以无法在不同 Bean 之间共享集合。
  2. 可以用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' 的声明。
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:613)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:514)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.itdjx.spring.dependency.injection.MainIOC.main(MainIOC.java:15)
Caused by: org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 26; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 'util:list' 的声明。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:458)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3237)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1917)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:746)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:348)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
... 14 more

 

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}]}
----------------------

posted @ 2017-03-01 10:00  Chinda  阅读(984)  评论(0编辑  收藏  举报