Spring 基于XML方式装配Bean

本文主要记录,如何使用xml的方式专配bean.

使用xml装配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" xmlns:p="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
</beans>

User:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private boolean sex;
    private String[] hobby;
    private List<Address> address;
    private Set<String> tags;
}

Address:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address {
    private String name;
    private String phone;
    private String userAddress;
}

ApplicationContext.xml

<?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:p="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">

    <!--user-->
    <bean id="user" class="cn.sivan.pojo.User">
        <property name="name" value="宁川"/>
        <property name="sex" value="true"/>
        <property name="hobby" ref="userHobby"/>
        <property name="address" ref="userAddress"/>
        <property name="tags" ref="tags"/>
    </bean>

    <!--address 1-->
    <bean id="address1" class="cn.sivan.pojo.Address">
        <property name="name" value="习惯"/>
        <property name="phone" value="15922223333"/>
        <property name="userAddress" value="地球村"/>
    </bean>
    <!--address 2-->
    <bean id="address2" class="cn.sivan.pojo.Address">
        <property name="name" value="习惯2"/>
        <property name="phone" value="15922223333"/>
        <!--注入null-->
        <property name="userAddress">
            <null/>
        </property>
    </bean>

    <!--hobby-->
    <p:list id="userHobby">
        <value>music</value>
        <value>basketball</value>
    </p:list>

    <!--list address-->
    <p:list id="userAddress">
        <ref bean="address1"/>
        <ref bean="address2"/>
    </p:list>

    <!--tags-->
    <p:set id="tags">
        <!--注入特殊符号-->
        <value>&lt;&lt;java desc&gt;&gt;</value>
        <value><![CDATA[<<spring desc>>]]></value>
    </p:set>
</beans>

Spring配置文件中常用XML标记说明

标 记 名 称 功 能 描 述
beans 整个配置文件的根节点,包含一个或多个Bean元素。在该标记中可配置命名空间与schema的装载路径,还可以通过default-init-method属性为该配置文件中的所有Bean实例统一指定初始化方法,通过default-destroy-method属性为该配置文件中的所有Bean实例统一指定销毁方法,通过default-lazy-init属性为该配置文件中的所有Bean实例统一指定是否进行迟延加载
bean 使用该标记定义一个Bean的实例化信息,用以指导Bean工厂正确地进行Bean的生产与装配。由class属性指定类全名,由id(推荐使用)或name属性指定生成的Bean实例名称。init-method属性指定初始化时要调用的方法,destroy-method属性实例销毁时要调用的方法。Bean实例的依赖关系可通过property子标记(set方式注入)或constructor-arg子标记(构造方式注入)来定义。bean标记中的scope属性用以设定Bean实例的生成方式,当scope设置为singleton或默认时以单例模式生成,当scope设置为prototype时则以原型(多例)模式生成。
constructor-arg 它是bean标记的子标记,用以传入构造参数进行实例化,这也是注入依赖关系的一种常见方式。index属性指定构造参数的序号(从0开始),当只有一个构造参数是通常省略不写;type属性指定构造参数的类型,当为基本数据类型时亦可省略此属性;参数值可通过ref属性或value属性直接指定,也可以通过ref或value子标记指定
property 它是bean标记的子标记,用以调用Bean实例中的相关Set方法完成属性值的赋值,从而完成依赖关系的注入。name属性指定Bean实例中的相应属性名称,属性值可通过ref属性或value属性直接指定,也可以通过ref或value子标记指定
ref 该标记通常作为constructor-arg、property、list、set、entry等标记的子标记,由bean属性指定一个Bean工厂中某个Bean实例的引用
value 该标记通常作为constructor-arg、property、list、set、entry等标记的子标记,用以直接指定一个常量值
list 该标记用以封装List或数组类型属性的依赖注入(即赋值),具体的元素通过ref或value子标记指定
set 该标记用以封装Set类型属性的依赖注入(即赋值),具体的元素通过ref或value子标记指定
map 该标记用以封装Map类型属性的依赖注入(即赋值),具体的元素通过entry子标记指定
entry 该标记通常用做map标记的子标记,用以设置一个“键/值”对。key属性接收字符串类型的“键”名称,“值”则可由ref或value子标记指定
props 该标记用以封装Properties类型属性的依赖注入(即赋值),具体的元素通过prop子标记指定
prop 该标记通常用做props标记的子标记,用以设置一个“键/值”对。key属性接收字符串类型的“键”名称,“值”则可放置在prop标记体内
null 该标记用于赋一个null值,与在Java中直接为某个属性赋null值效果等同
posted @ 2020-08-24 17:34  宁川  阅读(204)  评论(0)    收藏  举报