> 文档中心 > 【Spring入门 】7.注入集合、其他类型的属性

【Spring入门 】7.注入集合、其他类型的属性

文章目录

    • Spring注入集合
      • 1.在集合中设置普通类型的值(使用value属性)
      • 2.在集合中设置对象类型的值(使用ref属性)
    • Spring注入其他类型的属性
      • 1.注入Null值
      • 2.注入空字符串
      • 3.注入字面量
        • ①转义
        • ②使用短字符串
      • 4.级联属性赋值
      • 示例

Spring注入集合

可在Bean标签下的元素中,使用以下元素配置Java集合类型的属性和参数:

标签 说明
用于注入 list 类型的值,允许重复
用于注入 set 类型的值,不允许重复
用于注入 key-value 的集合,其中 key 和 value 都可以是任意类型
用于注入 key-value 的集合,其中 key 和 value 都是字符串类型

1.在集合中设置普通类型的值(使用value属性)

package org.demo3;import java.util.Arrays;import java.util.List;import java.util.Map;import java.util.Set;public class JavaCollection {    //数组类型    private String[] courses;    //list集合类型    private List<String> list;    //map集合类型    private Map<String,String> maps;    //set集合类型    private Set<String> sets;    @Override    public String toString() { return "JavaCollection{" +  "courses=" + Arrays.toString(courses) +  ", list=" + list +  ", maps=" + maps +  ", sets=" + sets +  '}';    }    public void setCourses(String[] courses) { this.courses = courses;    }    public void setList(List<String> list) { this.list = list;    }    public void setMaps(Map<String, String> maps) { this.maps = maps;    }    public void setSets(Set<String> sets) { this.sets = sets;    }}
package org.demo3;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {    private static final Log LOGGER= LogFactory.getLog(MainApp.class);    public static void main(String[] args) { //获取ApplicationContext容器 ApplicationContext context=new ClassPathXmlApplicationContext("demo3beans.xml"); //获取名为JavaCollection的Bean JavaCollection javaCollection=context.getBean("javaCollection",JavaCollection.class); LOGGER.info(javaCollection.toString());    }}
<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-3.0.xsd">    <bean id="javaCollection" class="org.demo3.JavaCollection">  <property name="courses">     <array>  <value>Java</value>  <value>PHP</value>  <value>C语言</value>     </array> </property>  <property name="list">     <list>  <value>张三</value>  <value>李四</value>  <value>王五</value>     </list> </property>  <property name="maps">     <map>  <entry key="JAVA" value="java"></entry>  <entry key="PHP" value="php"></entry>     </map> </property>  <property name="sets">     <set>  <value>JAVA</value>  <value>PHP</value>     </set> </property>    </bean></beans>

2.在集合中设置对象类型的值(使用ref属性)

package org.demo3;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class Course {    //private static final Log LOGGER = LogFactory.getLog(Course.class);    //课程编号    private String courseId;    //课程名称    private String courseName;    public String getCourseId() { return courseId;    }    public String getCourseName() { return courseName;    }    public void setCourseId(String courseId) { this.courseId = courseId;    }    public void setCourseName(String courseName) { this.courseName = courseName;    }    @Override    public String toString() { return "Course{" +  "courseId=" + courseId +  ", courseName='" + courseName + '\'' +  '}';    }}
package org.demo3;import java.util.Arrays;import java.util.List;import java.util.Map;import java.util.Set;public class JavaCollection {    //数组类型    //普通类型    private String[] courses;    //对象类型    private Course[] courses1;    public void setCourses1(Course[] courses1) { this.courses1 = courses1;    }    //list集合类型String    private List<String> list;    //map集合类型    private Map<String,String> maps;    //set集合类型    private Set<String> sets;    @Override    public String toString() { return "JavaCollection{" +  "courses(普通类型)=" + Arrays.toString(courses) +  ", courses1(对象类型)=" + Arrays.toString(courses1) +  ", list=" + list +  ", maps=" + maps +  ", sets=" + sets +  '}';    }    public void setCourses(String[] courses) { this.courses = courses;    }    public void setList(List<String> list) { this.list = list;    }    public void setMaps(Map<String, String> maps) { this.maps = maps;    }    public void setSets(Set<String> sets) { this.sets = sets;    }}
package org.demo3;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {    private static final Log LOGGER= LogFactory.getLog(MainApp.class);    public static void main(String[] args) { //获取ApplicationContext容器 ApplicationContext context=new ClassPathXmlApplicationContext("demo3beans.xml"); //获取名为JavaCollection的Bean  集合中设置普通类型值 JavaCollection javaCollection=context.getBean("javaCollection",JavaCollection.class ); //获取名为colloection的Bean 集合中设置对象类型值 JavaCollection colloection=context.getBean("colloection",JavaCollection.class); LOGGER.info(javaCollection.toString()); LOGGER.info(colloection.toString());    }}
<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-3.0.xsd">    <bean id="javaCollection" class="org.demo3.JavaCollection">  <property name="courses">     <array>  <value>Java</value>  <value>PHP</value>  <value>C语言</value>     </array> </property>  <property name="list">     <list>  <value>张三</value>  <value>李四</value>  <value>王五</value>     </list> </property>  <property name="maps">     <map>  <entry key="JAVA" value="java"></entry>  <entry key="PHP" value="php"></entry>     </map> </property>  <property name="sets">     <set>  <value>JAVA</value>  <value>PHP</value>     </set> </property>    </bean>        <bean id="course1" class="org.demo3.Course"> <property name="courseId" value="1"/> <property name="courseName" value="Java"/>    </bean>    <bean id="course2" class="org.demo3.Course"> <property name="courseId" value="2"/> <property name="courseName" value="PHP"/>    </bean>    <bean id="course3" class="org.demo3.Course"> <property name="courseId" value="3"/> <property name="courseName" value="C"/>    </bean>        <bean id="colloection" class="org.demo3.JavaCollection">  <property name="courses1">     <array>  <ref bean="course1"/>  <ref bean="course2"/>  <ref bean="course3"/>     </array> </property>  <property name="list">     <list>  <value>张三</value>  <value>李四</value>  <value>王五</value>  <value>赵六</value>     </list> </property>  <property name="maps">     <map>  <entry key="JAVA" value="java"></entry>  <entry key="PHP" value="php"></entry>     </map> </property>  <property name="sets">     <set>  <value>MySQL</value>  <value>Redis</value>     </set> </property>    </bean></beans>

Spring注入其他类型的属性

1.注入Null值

可以再XML配置文件中,通过元素将Null值注入到Bean中.

2.注入空字符串

在value属性值中空参数会当做空字符串处理

3.注入字面量

XML 配置中“”、“&”等特殊字符是不能直接保存的,否则 XML 语法检查时就会报错可以通过两种方式将包含特殊符号的属性注入 Bean 中。

①转义

特殊符号转义字符:

特殊字符 转义字符
& &amp ;
< &lt ;
> &gt ;
&quot ;
&apos ;

在转义过程中,需要注意以下几点:

  • 转义序列字符之间不能有空格
  • 转义序列必须以“;”结束
  • 单独出现的“&”不会被认为是转义的开始
  • 区分大小写

②使用短字符串

通过短字符串 将包含特殊符号的属性值包裹起来,可以让 XML 解析器忽略对其中内容的解析,以属性原本的样子注入到 Bean 中。

使用短字符串 需要注意以下几点:

  • 此部分不能再包含”]]>”;
  • 不允许嵌套使用;
  • “]]>”中不能包含空格或者换行。

4.级联属性赋值

可以再的子元素中,为它所依赖的Bean属性进行赋值,这就是"级联属性赋值"

使用级联属性赋值时,需要注意以下 3点:

  • Java 类中必须有 setter 方法;
  • Java 类中必须有无参构造器(默认存在);
  • 依赖其他 Bean 的类中,必须提供一个它依赖的 Bean 的 getXxx() 方法。

示例

package org.demo4;public class ExamBean {    //null值    private String propertyNull;    //空字符串    private String propertyEmpty;    //包含特殊符号的字面量    private String propertyLiteral;    //使用短字符串转义特殊符号    private String propertyCDATA;    //依赖的Bean(对象属性)    private DependBean dependBean;    //使用级联属性赋值时,需要提供一个依赖对象的getter方法    public DependBean getDependBean() { return dependBean;    }    public void setPropertyCDATA(String propertyCDATA) { this.propertyCDATA = propertyCDATA;    }    public void setDependBean(DependBean dependBean) { this.dependBean = dependBean;    }    @Override    public String toString() { return "ExamBean{" +  "propertyNull='" + propertyNull + '\'' +  ", propertyEmpty='" + propertyEmpty + '\'' +  ", propertyLiteral='" + propertyLiteral + '\'' +  ", propertyCDATA='" + propertyCDATA + '\'' +  ", dependBean=" + dependBean +  '}';    }    public void setPropertyNull(String propertyNull) { this.propertyNull = propertyNull;    }    public void setPropertyEmpty(String propertyEmpty) { this.propertyEmpty = propertyEmpty;    }    public void setPropertyLiteral(String propertyLiteral) { this.propertyLiteral = propertyLiteral;    }}
package org.demo4;/ * 级联 依赖 */public class DependBean {    private String dependProperty;    public void setDependProperty(String dependProperty) { this.dependProperty = dependProperty;    }    @Override    public String toString() { return "DependBean{" +  "dependProperty='" + dependProperty + '\'' +  '}';    }}
package org.demo4;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {    private static final Log LOGGER= LogFactory.getLog(MainApp.class);    public static void main(String[] args) { //创建bean工厂 ApplicationContext context=new ClassPathXmlApplicationContext("demo4beans.xml"); ExamBean exam=context.getBean("exampleBean",ExamBean.class); LOGGER.info(exam.toString());    }}
<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-3.0.xsd">    <bean id="exampleBean" class="org.demo4.ExamBean">  <property name="propertyNull">     <null/> </property>  <property name="propertyEmpty" value=""/>  <property name="propertyLiteral" value="<span class="token entity named-entity" title="<bdqn">>"/> <!--使用  注入包含特殊符号的字面量--> <property name="propertyCDATA">     <value><![CDATA[]]></value> </property>  <property name="dependBean" ref="dependBean"></property>  <property name="dependBean.dependProperty" value="级联属性赋值"></property>    </bean>        <bean id="dependBean" class="org.demo4.DependBean">  <property name="dependProperty" value="依赖 Bean 内部赋值"></property>    </bean></beans>