002SpringIOC002基于XML文件配置Bean
Posted 执笔未来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002SpringIOC002基于XML文件配置Bean相关的知识,希望对你有一定的参考价值。
1 管理普通Bean
1.1 创建对象
在配置文件中使用bean标签可以实现对象的创建。
配置如下:
<bean id="user" class="com.demo.spring.User"></bean>
默认使用的是类中的无参构造方法。
bean标签中的属性说明:
id属性:表示对象的唯一标识。
class属性:创建的对象所在的类的全路径。
name属性:和id属性作用类似,可以使用特殊符号,但使用较少,早期使用的属性。
1.2 注入属性
1.2.1 通过setter方法注入属性
这种方式需要使用property标签,需要提供无参构造方法,以及定义属性及其setter方法。
配置如下:
<bean id="user" class="com.demo.spring.User"> <property name="name" value="张三"></property> <property name="age" value="22"></property> </bean>
property标签中的属性说明:
name属性:对象的属性名称。
value属性:对象的属性值。
1.2.2 通过构造器注入属性
这种方式需要使用constructor-arg标签,需要提供有参构造方法,以及定义属性但不要求有setter方法。
配置如下:
<bean id="user" class="com.demo.spring.User"> <constructor-arg name="name" value="张三"></constructor-arg> <constructor-arg name="age" value="22"></constructor-arg> </bean>
constructor-arg标签中的属性说明:
name属性:对象的属性名称。
value属性:对象的属性值。
type属性:对象的属性对应的类型,可省略。如果是基本类型就写基本类型,如果是引用类型就写全类名。
index属性:按照构造器中属性的顺序注入属性,很少用。构造器中属性的顺序从0开始。
1.2.3 通过名称空间注入属性
可以使用p名称空间设置属性,但较少使用。
这种方式需要使用p属性,需要提供无参构造方法,以及定义属性及其setter方法。
需要添加p名称空间:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
配置如下:
<bean id="user" class="com.demo.spring.User" p:name="张三" p:age="22"></bean>
1.3 注入特殊属性
1.3.1 注入Null值
配置如下:
<bean id="user" class="com.demo.spring.User"> <property name="name"> <null /> </property> </bean>
1.3.2 注入包含特殊符号的值
配置如下:
<bean id="user" class="com.demo.spring.User"> <property name="name"> <value><![CDATA[张三]]></value> </property> </bean>
1.4 注入其他Bean对象
1.4.1 注入外部Bean
可以通过注入外部Bean的方式注入其他Bean对象。
配置如下:
<bean id="sz" class="com.demo.spring.Address"> <property name="province" value="广东省"></property> <property name="city" value="深圳市"></property> </bean> <bean id="user" class="com.demo.spring.User"> <property name="name" value="张三"></property> <property name="address" ref="sz"></property> </bean>
property标签中的属性说明:
ref属性:外部Bean的id属性。
1.4.2 注入内部的Bean
可以通过注入内部Bean的方式注入其他Bean对象。
配置如下:
<bean id="user" class="com.demo.spring.User"> <property name="name" value="张三"></property> <property name="address"> <bean id="sz" class="com.demo.spring.Address"> <property name="province" value="广东省"></property> <property name="city" value="深圳市"></property> </bean> </property> </bean>
1.4.3 注入级联属性
可以注入其他Bean的属性,也就是注入级联属性。
需要提供Bean的getter方法以及Bean属性的getter方法。
配置如下:
<property name="address.province" value="山东省"></property>
1.4.4 自动装配
可以根据装配方式自动引用其他Bean对象,不经常使用。
配置如下:
<bean id="sz" class="com.demo.spring.Address"> <property name="province" value="广东省"></property> <property name="city" value="深圳市"></property> </bean> <bean id="user" class="com.demo.spring.User" autowire="byName"> <!--<property name="address" ref="sz"></property>--> </bean>
bean标签中的属性说明:
autowire属性:外部Bean的引用方式。
autowire属性有如下取值:
byName:根据属性名进行装配。这种方式会在配置文件中查找id和属性名一样的Bean,如果查到多个则报错,如果没有查到则设置null。
byType:根据属性类型进行装配。这种方式会在配置文件中查找和属性类型一样的Bean,如果查到多个则报错,如果没有查到则设置null。
constructor:根据构造器进行装配。不常用。
default:不自动装配,设置属性为null。默认使用此种方式。
1.5 注入集合属性
1.5.1 注入数组属性
需要定义数组属性并提供setter方法。
配置如下:
<bean id="audi" class="com.demo.spring.Car"> <property name="brand" value="奥迪"></property> <property name="color" value="白色"></property> </bean> <bean id="user" class="com.demo.spring.User"> <property name="name" value="张三"></property> <property name="pets"> <array> <value>猫</value> <value>狗</value> </array> </property> <property name="cars"> <array> <ref bean="audi"></ref> <bean id="volvo" class="com.demo.spring.Car"> <property name="brand" value="沃尔沃"></property> <property name="color" value="黑色"></property> </bean> </array> </property> </bean>
标签说明如下:
array标签:定义数组属性。
value标签:定义数组中的基本类型和字符串类型的成员。
ref标签:定义数组中的引用类型的成员,外部注入Bean。
bean标签:定义数组中的引用类型的成员,内部注入Bean。
1.5.2 注入List属性
需要定义List属性并提供setter方法。
配置如下:
<bean id="audi" class="com.demo.spring.Car"> <property name="brand" value="奥迪"></property> <property name="color" value="白色"></property> </bean> <bean id="user" class="com.demo.spring.User"> <property name="name" value="张三"></property> <property name="pets"> <list> <value>猫</value> <value>狗</value> </list> </property> <property name="cars"> <list> <ref bean="audi"></ref> <bean id="volvo" class="com.demo.spring.Car"> <property name="brand" value="沃尔沃"></property> <property name="color" value="黑色"></property> </bean> </list> </property> </bean>
标签说明如下:
list标签:定义List属性。
value标签:定义List中的基本类型和字符串类型的成员。
ref标签:定义List中的引用类型的成员,外部注入Bean。
bean标签:定义List中的引用类型的成员,内部注入Bean。
1.5.3 注入Set属性
需要定义Set属性并提供setter方法。
配置如下:
<bean id="audi" class="com.demo.spring.Car"> <property name="brand" value="奥迪"></property> <property name="color" value="白色"></property> </bean> <bean id="user" class="com.demo.spring.User"> <property name="name" value="张三"></property> <property name="pets"> <set> <value>猫</value> <value>狗</value> </set> </property> <property name="cars"> <set> <ref bean="audi"></ref> <bean id="volvo" class="com.demo.spring.Car"> <property name="brand" value="沃尔沃"></property> <property name="color" value="黑色"></property> </bean> </set> </property> </bean>
标签说明如下:
set标签:定义Set属性。
value标签:定义Set中的基本类型和字符串类型的成员。
ref标签:定义Set中的引用类型的成员,外部注入Bean。
bean标签:定义Set中的引用类型的成员,内部注入Bean。
1.5.4 注入Map属性
需要定义Map属性并提供setter方法。
配置如下:
<bean id="audi" class="com.demo.spring.Car"> <property name="brand" value="奥迪"></property> <property name="color" value="白色"></property> </bean> <bean id="mazda" class="com.demo.spring.Car"> <property name="brand" value="马自达"></property> <property name="color" value="红色"></property> </bean> <bean id="user" class="com.demo.spring.User"> <property name="name" value="张三"></property> <property name="pets"> <map> <entry key="cat" value="猫"></entry> <entry key="dog" value="狗"></entry> </map> </property> <property name="cars"> <map> <entry key="奥迪" value-ref="audi"></entry> <entry key="马自达" value-ref="mazda"></entry> <entry key="沃尔沃"> <bean id="volvo" class="com.demo.spring.Car"> <property name="brand" value="沃尔沃"></property> <property name="color" value="黑色"></property> </bean> </entry> </map> </property> </bean>
标签及属性说明如下:
map标签:定义Map属性。
entry标签:定义Map中的成员。
key属性:定义Map中的基本类型和字符串类型的key。
key-ref属性:定义Map中的引用类型的key。
value属性:定义Map中的基本类型和字符串类型的value。
value-ref属性:定义Map中的引用类型的value,外部注入Bean。
bean标签:定义Map中的引用类型的value,内部注入Bean。
1.6 抽取集合属性
使用util名称空间可以将集合属性抽取出来作为单独的一个Bean。
需要添加util名称空间:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" 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">
配置如下:
<util:map id="pets"> <entry key="cat" value="猫"></entry> <entry key="dog" value="狗"></entry> </util:map> <util:map id="cars"> <entry key="奥迪" value-ref="audi"></entry> <entry key="马自达" value-ref="mazda"></entry> <entry key="沃尔沃"> <bean id="volvo" class="com.demo.spring.Car"> <property name="brand" value="沃尔沃"></property> <property name="color" value="黑色"></property> </bean> </entry> </util:map> <bean id="audi" class="com.demo.spring.Car"> <property name="brand" value="奥迪"></property> <property name="color" value="白色"></property> </bean> <bean id="mazda" class="com.demo.spring.Car"> <property name="brand" value="马自达"></property> <property name="color" value="红色"></property> </bean> <bean id="user" class="com.demo.spring.User"> <property name="name" value="张三"></property> <property name="pets" ref="pets"></property> <property name="cars" ref="cars"></property> </以上是关于002SpringIOC002基于XML文件配置Bean的主要内容,如果未能解决你的问题,请参考以下文章