spring之bean管理

spring之bean管理


一、bean是什么?

在软件应用中由Spring管理的所有的对象都称之为Bean,如果使用了spring框架那么我们自己创建的类都需要由Spring管理,首先需要对这个类进行配置。

二、使用步骤

1.基于xml的方式创建bean对象,注入属性

代码如下
首先bean对象的定义如下:

package com.lhh.model;

public class Pig {
    
    
    private int age;
    private String name;

    public Pig(int age, String name) {
    
    
        this.age = age;
        this.name = name;
    }


    @Override
    public String toString() {
    
    
        return "Pig{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
    /*通过set方法进行注入age*/
    public void setAge(int age) {
    
    
        this.age = age;
    }

    /*通过set方法进行注入name*/
    public void setName(String name) {
    
    
        this.name = name;
    }

    public Pig() {
    
    
    }
}

<!--创建一个类,class属性定义该类的全限定类名,id用于给类起别名,这个别名用于
    测试的时候,拿到该bean对象,然后进行相关的操作。bean标签里面的property标签用于注入属性,也就是给属性中设置值(这里使用的是set方法进行注入,其实还可以使用构造方法进行注入。)
    -->
    <bean id="pig" class="com.lhh.model.Pig">
        <property name="age" value="15"></property>
        <property name="name" value="张三"></property>
    </bean>
<!--通过构造函数进行属性的注入-->
    <bean id="pig" class="com.lhh.model.Pig">
        <constructor-arg name="age" value="19"></constructor-arg>
        <constructor-arg name="name" value="张三"></constructor-arg>
    </bean>

使用bean:

@Test
    public void testShuXing() {
    
    
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Pig pig = (Pig) context.getBean("pig");
        System.out.println(pig);
    }

2.基于xml方式创建bean对象,注入外部bean,注入list,map,set等等

代码如下(示例):
首先定义一个bean

package com.lhh.spring1;

import org.springframework.beans.factory.BeanFactory;

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

public class Teacher {
    
    
    private List<String> list;

    private int[]array;

    private Map<String,String> stringMap;

    private Set<String> stringSet;

    private List<User> userList;

    private Map<String,User> stringUserMap;

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

    @Override
    public String toString() {
    
    
        return "Teacher{" +
                "list=" + list +
                ", array=" + Arrays.toString(array) +
                ", stringMap=" + stringMap +
                ", stringSet=" + stringSet +
                ", userList=" + userList +
                ", stringUserMap=" + stringUserMap +
                '}';
    }

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

    public void setStringMap(Map<String, String> stringMap) {
    
    
        this.stringMap = stringMap;
    }

    public void setStringSet(Set<String> stringSet) {
    
    
        this.stringSet = stringSet;
    }

    public void setUserList(List<User> userList) {
    
    
        this.userList = userList;
    }

    public void setStringUserMap(Map<String, User> stringUserMap) {
    
    
        this.stringUserMap = stringUserMap;
    }
}

对应的核心配置文件中的bean的具体配置如下:

<!--测试数组集合list,map,set的注入,以及list范型对象,和map范型对象的注入-->
    <bean id="teacher" class="com.lhh.spring1.Teacher">
        <!--注入数组-->
        <property name="array">
            <array>
                <value>12</value>
                <value>13</value>
                <value>14</value>
                <value>15</value>
                <value>16</value>
            </array>
        </property>

        <!--注入list集合-->
        <property name="list">
            <list>
                <value>zhangsan</value>
                <value>lishi</value>
                <value>wangwu</value>
                <value>zhaoliu</value>
            </list>
        </property>

        <!--<property name="list" ref="list"></property>-->

        <!--注入set-->
        <property name="stringSet">
            <set>
                <value>123</value>
                <value>456</value>
                <value>789</value>
            </set>
        </property>

        <!--注入map集合-->
        <property name="stringMap">
            <!--注入了三条数据-->
            <map>
                <entry key="zhangsan" value="16"></entry>
                <entry key="zhaoliu" value="19"></entry>
                <entry key="wangwu" value="20"></entry>
            </map>
        </property>

        <!--注入带有对象的list集合-->
        <property name="userList">
            <list>
                <ref bean="user"></ref>
                <ref bean="user1"></ref>
            </list>
        </property>

        <!--注入带有对象的map集合的注入-->

        <property name="stringUserMap">
            <map>
                <entry key="zhangsan" value-ref="user"></entry>
                <entry key="zhangsan" value-ref="user1"></entry>
            </map>
        </property>
    </bean>
在teacher这个bean当中,里面的属性需要使用这个外部list,那么就直接在内部引用就好了。另外使用这个提取list集合的属性注入,需要导入约束,util
分别为:
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd"


<!--提取list集合的属性注入-->
    <util:list id="list">
        <list>
            <value>123456</value>
            <value>456123</value>
            <value>156324</value>
        </list>
    </util:list>

总结

外部bean的注入:
可以使用set方法注入,也可以使用构造注入。只不过在xml文件当中,bean标签里面的property标签使用ref属性引入外部bean

属性注入:
有基本数据类型的注入,也有数组,集合类型的属性注入,再者,可以有对象类型的集合的注入。这个时候,需要使用引用外部的bean对象。

猜你喜欢

转载自blog.csdn.net/qq_41486775/article/details/108920262