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的主要内容,如果未能解决你的问题,请参考以下文章

OA学习笔记-002-Sruts2.1配置

B-002基于SSM的电影选票系统(含论文)

002-Go通过ioutil 读写文件

002.DHCP配置

002 nginx的基本说明和配置

Spring_002 依赖注入方式实现