Spring-2-Bean之xml

杀马特。学长 韩版系。学妹 提交于 2020-01-18 18:29:33

一、Bean的实例化方式

Bean的实例化有三种方式:

  1. 通过构造函数实例化(常用)
  2. 通过静态工厂实例化
  3. 通过实例工厂实例化

1. 通过构造函数实例化(常用)
<bean id="bean1" class="com.seven.entity.Bean1"/>

在这里插入图片描述

2. 通过静态工厂实例化

准备一个静态工厂:

package com.seven.factory;

import com.seven.entity.Bean2;

public class Bean2StaFactory {

    public static Bean2 getBean2() {
        Bean2 bean2 = new Bean2();
        bean2.setMsg("通过【静态工厂】实例化的Bean2对象");
        return bean2;
    }
}

spring配置文件:

<bean id="bean2" class="com.seven.factory.Bean2StaFactory" factory-method="getBean2"/>

在这里插入图片描述

3. 通过实例工厂实例化

准备一个实例工厂:

package com.seven.factory;

import com.seven.entity.Bean3;

public class Bean3Factory {

    public Bean3 getBean3() {
        Bean3 bean3 = new Bean3();
        bean3.setMsg("通过【实例工厂】实例化的Bean3对象");
        return bean3;
    }
}

spring配置文件:

<bean id="bean3Factory" class="com.seven.factory.Bean3Factory"/>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"/>

在这里插入图片描述

二、Bean的常用属性

  1. id
  2. name
  3. class
  4. scope

1. id

作用:给bean起名称,通过这个名称可以得到这个bean。
注意:不能包含特殊符号。

2. name

作用:与id属性的作用一样。
注意:与id的区别是,可以包含特殊符号。

3. class

作用:指定该bean的全限定类名。

4. scope

作用:设置该bean的作用范围,默认是单例。
可取值:
(1)singleton:默认值,单例。
(2)prototype:多例。
(3)request:WEB项目中,spring创建一个bean的对象,将对象存入到request域中。
(4)session:WEB项目中,spring创建一个bean的对象,将对象存入到session域中。
(5)globalSession:WEB项目中,运行在Porlet环境中,如果没有Porlet环境,则相当于是session。

测试一下:
spring配置文件:

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- id属性,class属性 -->
    <bean id="person1" class="com.seven.bean.Person"/>

    <!-- name属性 -->
    <bean name="person2_" class="com.seven.bean.Person"/>

    <!-- scope属性:单例 -->
    <bean id="person3" class="com.seven.bean.Person" scope="singleton"/>

    <!-- scope属性:多例 -->
    <bean id="person4" class="com.seven.bean.Person" scope="prototype"/>

</beans>

测试类:

import com.seven.bean.Person;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AttributeTest {

    private ApplicationContext context;

    @Before
    public void init() {
        context = new ClassPathXmlApplicationContext("spring.config.xml");
    }

    @Test
    public void test() {
        //测试id
        Person person1 = (Person) context.getBean("person1");
        System.out.println("person1 --> " + person1);

        //测试name
        Person person2 = (Person) context.getBean("person2_");
        System.out.println("person2 --> " + person2.getName());

        //测试scope
        //1.单例
        Person person31 = (Person) context.getBean("person3");
        Person person32 = (Person) context.getBean("person3");
        System.out.println("单例的Bean --> " + (person31 == person32));

        //2.多例
        Person person41 = (Person) context.getBean("person4");
        Person person42 = (Person) context.getBean("person4");
        System.out.println("多例的Bean --> " + (person41 == person42));
    }
}

运行结果:
在这里插入图片描述
单例和多例还要注意一下Bean分别是什么时候被创建的!!!

三、Bean的属性注入

Bean的属性注入有两种方式:

  1. 通过带参的构造函数注入。
  2. 通过set方法注入。(常用)

1.通过带参的构造函数注入
<bean id="person1" class="com.seven.bean.Person">
    <constructor-arg value="通过带参数的构造函数注入属性"/>
</bean>

constructor-arg标签的属性:

<constructor-arg value="属性值" name="属性名" type="属性类型" ref="属性的映射" index="属性标号"/>
2.通过set方法注入

2.1 通过set方法注入简单的属性

<bean id="person2" class="com.seven.bean.Person">
    <property name="name" value="通过set方法注入简单的属性"/>
</bean>

在这里插入图片描述
2.2 通过set方法注入对象类型属性

<bean id="person3" class="com.seven.bean.Person">
    <property name="name" value="通过set方法注入对象类型属性"/>
    <property name="card" ref="card3"/>
</bean>
<bean id="card3" class="com.seven.bean.Card">
    <property name="cardnum" value="123123123"/>
</bean>

在这里插入图片描述
3.3 通过set方法注入复杂类型属性

<!-- 通过set方法注入复杂类型属性。。。list -->
<bean id="person4" class="com.seven.bean.Person">
    <property name="name" value="通过set方法注入复杂类型属性。。。list"/>
    <property name="list">
        <list>
            <value></value>
            <value></value>
            <value></value>
            <value></value>
        </list>
    </property>
</bean>

<!-- 通过set方法注入复杂类型属性。。。set -->
<bean id="person5" class="com.seven.bean.Person">
    <property name="name" value="通过set方法注入复杂类型属性。。。list"/>
    <property name="set">
        <set>
            <value></value>
            <value></value>
            <value></value>
            <value></value>
        </set>
    </property>
</bean>

<!-- 通过set方法注入复杂类型属性。。。arrs -->
<bean id="person6" class="com.seven.bean.Person">
    <property name="name" value="通过set方法注入复杂类型属性。。。arrs"/>
    <property name="arrs">
        <array>
            <value></value>
            <value></value>
            <value></value>
            <value></value>
        </array>
    </property>
</bean>

<!-- 通过set方法注入复杂类型属性。。。map -->
<bean id="person7" class="com.seven.bean.Person">
    <property name="name" value="通过set方法注入复杂类型属性。。。map"/>
    <property name="map">
        <map>
            <entry key="username" value="root"/>
            <entry key="password" value="tiger"/>
            <entry key="username" value="root"/>
        </map>
    </property>
</bean>

<!-- 通过set方法注入复杂类型属性。。。properties -->
<bean id="person8" class="com.seven.bean.Person">
    <property name="name" value="通过set方法注入复杂类型属性。。。properties"/>
    <property name="properties">
        <props>
            <prop key="username">root</prop>
            <prop key="password">tiger</prop>
        </props>
    </property>
</bean>

更新时间:2020-1-18
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!