Spring装配Bean——通过XML配置装配Bean

使用XML装配Bean需要定义对应的XML,这里需要引入对应的XML模式(XSD)文件,这些文件会定义配置Spring Bean的一些元素,一个简单的模板如下:

<?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.xsd">
	<!-- 配置代码  -->
</beans>

装配简单值

先来一个最简单的装配,XML代码如下:

    <bean id="source" class="Juice.main.pojo.Source">
        <property name="fruit" value="橙汁"></property>
        <property name="size" value="2"></property>
        <property name="sugar" value="少糖"></property>
    </bean>

简单的解释一下:

  • id属性是Spring找到的这个Bean的编号,不过id不是一个必需的属性,如果没有声明它,那么Spring将会采用 “全限定名#{number}” 的格式生产编号。如果只声明了这样的类,而没有声明id,那么SPring为其生产的编号就是“com.ssm.learn.pojo.Role#0”。
  • class显然就是一个类的全限定名。
  • property元素是定义类的属性,其中name属性定义的是属性名称,而value是其值。

装配集合

有时候要做一些复制的装配工作,比如Set、Map、Array和Properties等。为了很好的介绍,我们举一个例子来说明一下。首先我们新建一个Bean,代码如下:

package Juice.main.pojo;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class complex {
    private Long id;
    private List<String> list;
    private Map<String,String> map;
    private Properties props;
    private Set<String> set;
    private String[] array;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public Map<String, String> getMap() {
        return map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public Properties getProps() {
        return props;
    }

    public void setProps(Properties props) {
        this.props = props;
    }

    public Set<String> getSet() {
        return set;
    }

    public void setSet(Set<String> set) {
        this.set = set;
    }

    public String[] getArray() {
        return array;
    }

    public void setArray(String[] array) {
        this.array = array;
    }
}

为此可以这样装配这些属性。

<bean id="complex" class="Juice.main.pojo.complex">
        <property name="id" value="1" />

        <property name="list">
            <list>
                <value>value-list-1</value>
                <value>value-list-2</value>
                <value>value-list-3</value>
            </list>
        </property>

        <property name="map">
            <map>
                <entry key="key1" value="value-key-1" />
                <entry key="key2" value="value-key-2" />
                <entry key="key3" value="value-key-3" />
            </map>
        </property>

        <property name="props">
            <props>
                <prop key="prop1">value-prop-1</prop>
                <prop key="prop1">value-prop-2</prop>
                <prop key="prop1">value-prop-3</prop>
            </props>
        </property>

        <property name="set">
            <set>
                <value>value-set-1</value>
                <value>value-set-2</value>
                <value>value-set-3</value>
            </set>
        </property>

        <property name="array">
            <array>
                <value>value-array-1</value>
                <value>value-array-2</value>
                <value>value-array-3</value>
            </array>
        </property>
    </bean>

当然这里的装配主要集中在比较简单的String类型上,其主要的目的是告诉大家如何装配简易的数据到集合中。
从上面可以看到对字符串的各个集合的装载,但是有些时候可以需要更为复杂的装载,比如一个list可以是一个系列类的对象,又如一个Map集合类,键可以是一个类对象,而值也是一个类对象。为此,我们再来举一个简单的例子。

public class Role {
    private Long id;
    private String roleName;
    private String note;
}

public class User {
    private Long id;
    private String userName;
    private String note;
}


public class UserRoleAdd {
    private Long id;
    private List<Role> list;
    private Map<Role,User> map;
    private Set<Role> set;
}

这里可以看到,对于List、Map和Set等集合类使用的是类对象,不过不用担心,Spring IoC容器提供了对应的配置方法,代码如下:

<bean id="role1" class="Juice.main.pojo.Role">
        <property name="id" value="1" />
        <property name="roleName" value="role_name_1" />
        <property name="note" value="role_note_1" />
    </bean>

    <bean id="role2" class="Juice.main.pojo.Role">
        <property name="id" value="2" />
        <property name="roleName" value="role_name_2" />
        <property name="note" value="role_note_2" />
    </bean>

    <bean id="user1" class="Juice.main.pojo.User">
        <property name="id" value="1" />
        <property name="userName" value="user_name_1" />
        <property name="note" value="user_note_1" />
    </bean>

    <bean id="user2" class="Juice.main.pojo.User">
        <property name="id" value="2" />
        <property name="userName" value="user_name_2" />
        <property name="note" value="user_note_2" />
    </bean>

    <bean id="userRoleAdd" class="Juice.main.pojo.UserRoleAdd">
        <property name="id" value="1" />
        <property name="list">
            <list>
                <ref bean="role1" />
                <ref bean="role2" />
            </list>
        </property>
        <property name="map">
            <map>
                <entry key-ref="role1" value-ref="user1" />
                <entry key-ref="role2" value-ref="user2" />
            </map>
        </property>
        <property name="set">
            <set>
                <ref bean="role1" />
                <ref bean="role2" />
            </set>
        </property>
    </bean>

这里先定义了两个角色Bean(role1和role2)和两个用户(user1和user2),它们和之前的定义并没有什么不同,只是后面的定义稍微不一样。

命名空间装配

除了上述的配置之外,Spring还提供了对应的命名空间的定义,只是在使用命名空间的时候要先引入对应的命名空间和XML模式。比如我们用这个模式来定义userRoleAdd类实例。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:c="http://www.springframework.org/schema/c"
       xmlns:p="http://www.springframework.org/schema/p"
       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">
    <bean id="role1" class="Juice.main.pojo.Role"
          c:_0="1" c:_1="role_name_1" c:_2="role_note_1" />

    <bean id="role2" class="Juice.main.pojo.Role"
          p:id="2" p:roleName="role_name_2" p:note="role_note_2" />

    <bean id="user1" class="Juice.main.pojo.User"
          p:id="1" p:userName="user_name_1" p:note="user_note_1" />

    <bean id="user2" class="Juice.main.pojo.User"
          p:id="2" p:userName="user_name_2" p:note="user_note_2" />

    <util:list id="list">
        <ref bean="role1" />
        <ref bean="role2" />
    </util:list>

    <util:map id="map">
        <entry key-ref="role1" value-ref="user1" />
        <entry key-ref="role2" value-ref="user2" />
    </util:map>

    <util:set id="set">
        <ref bean="role1" />
        <ref bean="role2" />
    </util:set>

    <bean id="userRoleAdd" class="Juice.main.pojo.UserRoleAdd"
          p:id="1" p:list-ref="list" p:map-ref="map" p:set-ref="set" />
</beans>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值