Spring注入集合
【摘要】 Spring注入集合可在Bean标签下的<property>元素中,使用以下元素配置Java集合类型的属性和参数:标签说明<list>用于注入 list 类型的值,允许重复<set>用于注入 set 类型的值,不允许重复<map>用于注入 key-value 的集合,其中 key 和 value 都可以是任意类型<props>用于注入 key-value 的集合,其中 key 和 valu...
Spring注入集合
可在Bean标签下的<property>元素中,使用以下元素配置Java集合类型的属性和参数:
标签 | 说明 |
---|---|
<list> | 用于注入 list 类型的值,允许重复 |
<set> | 用于注入 set 类型的值,不允许重复 |
<map> | 用于注入 key-value 的集合,其中 key 和 value 都可以是任意类型 |
<props> | 用于注入 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());
}
}
<?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-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>
<!--List类型-->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
</list>
</property>
<!--map类型-->
<property name="maps">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<!--set类型-->
<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());
}
}
<?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-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>
<!--List类型-->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
</list>
</property>
<!--map类型-->
<property name="maps">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<!--set类型-->
<property name="sets">
<set>
<value>JAVA</value>
<value>PHP</value>
</set>
</property>
</bean>
<!--course类的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>
<!--List 类型-->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>赵六</value>
</list>
</property>
<!--Map 类型-->
<property name="maps">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<!--Set 类型-->
<property name="sets">
<set>
<value>MySQL</value>
<value>Redis</value>
</set>
</property>
</bean>
</beans>
Spring注入其他类型的属性
1.注入Null值
可以再XML配置文件中,通过<null/>元素将Null值注入到Bean中.
2.注入空字符串
在value属性值中空参数会当做空字符串处理
3.注入字面量
XML 配置中“<”、“>”、“&”等特殊字符是不能直接保存的,否则 XML 语法检查时就会报错可以通过两种方式将包含特殊符号的属性注入 Bean 中。
①转义
特殊符号转义字符:
特殊字符 | 转义字符 |
---|---|
& | & ; |
< | < ; |
> | > ; |
" | " ; |
' | &apos ; |
在转义过程中,需要注意以下几点:
- 转义序列字符之间不能有空格
- 转义序列必须以“;”结束
- 单独出现的“&”不会被认为是转义的开始
- 区分大小写
②使用短字符串<![CDATA[]]>
通过短字符串 <![CDATA[]]> 将包含特殊符号的属性值包裹起来,可以让 XML 解析器忽略对其中内容的解析,以属性原本的样子注入到 Bean 中。
使用短字符串 <![CDATA[]]> 需要注意以下几点:
- 此部分不能再包含”]]>”;
- 不允许嵌套使用;
- “]]>”中不能包含空格或者换行。
4.级联属性赋值
可以再<bean>的<property>子元素中,为它所依赖的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());
}
}
<?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-3.0.xsd">
<bean id="exampleBean" class="org.demo4.ExamBean">
<!--使用null标签注入Null值-->
<property name="propertyNull">
<null/>
</property>
<!--使用空参数注入空字符串-->
<property name="propertyEmpty" value=""/>
<!--通过转义注入包含特殊符号的字面量-->
<property name="propertyLiteral" value="<bdqn>"/>
<!--使用 <![CDATA[]]> 注入包含特殊符号的字面量-->
<property name="propertyCDATA">
<value><![CDATA[<bdqn>]]></value>
</property>
<!--注入依赖的Bean-->
<property name="dependBean" ref="dependBean"></property>
<!--级联属性赋值-->
<property name="dependBean.dependProperty" value="级联属性赋值"></property>
</bean>
<!--对 ExampleBean 依赖的 Bean 进行定义-->
<bean id="dependBean" class="org.demo4.DependBean">
<!--对属性进行赋值-->
<property name="dependProperty" value="依赖 Bean 内部赋值"></property>
</bean>
</beans>
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)