spring 之 DI

1. DI:dependency injection:依赖注入。依赖注入和IOC是一件事不同的说法,对象的创建是依赖于容器的,对象属性的设置也是依赖于容器的。程序中被动接收对象,对象的属性值也是被动设置的。这个过程在spring称为注入。所以IOC又叫依赖注入(有容器来创建和管理对象)。

2.DI 和 IOC的区别:

DI (依赖注入) 更侧重于过程, 把对象通过setter、contruct、args等方式 注入到另一个对象中作为这个对象的一个成员变量(也可能是其他);
IOC(控制反转): 侧重于结果,说的是对象的产生不是通过直接new 的,而是通过依赖注入的方式的。

3.Spring的依赖注入分为两类:

  • 构造器注入
  • setter注入

4.Spring 中不同类型的属性如何注入:

  • 基本类型通过value直接注入
    <bean id="user" class="cn.wh.vo.User">
            <!-- 字符串和基本类型的数据可以直接注入 -->
            <property name="name" value="张三疯"/>
            <property name="age" value="218"/>
        </bean>
  • 数组注入
    <!-- 数组的注入 -->
            <property name="hobbies">
                <array>
                    <value>乒乓球</value>
                    <value>羽毛球</value>
                    <value>斯洛克</value>
                </array>
            </property>

    或者

    <!-- 数组的注入 -->
            <property name="hobbies">
                <list>
                    <value>乒乓球</value>
                    <value>羽毛球</value>
                    <value>斯洛克</value>
                </list>
            </property>

    注意:list和数组的注入一致。

  • set集合的注入

    <!-- Set集合的注入  重复的数据会自动覆盖-->
            <property name="qqs">
                <set>
                    <value>261042456</value>
                    <value>78234322</value>
                    <value>8982342</value>
                    <value>8982342</value>
                    <value>898234201</value>
                </set>
            </property>
  • map的注入
    <!-- map的注入 -->
            <property name="cards">
                <map>
                    <entry key="6221231212323" value="农业银行"></entry>
                    <entry key="23421341324">
                        <value>工商银行</value>
                    </entry>
                </map>
            </property>
  • properties的注入
    <!-- properties的注入 -->
            <property name="props">
                <props>
                    <prop key="height">180cm</prop>
                    <prop key="weight">90kg</prop>
                    <prop key="sanwei">80,80,80</prop>
                </props>
            </property>
  • 自定义类型的注入
    <!-- 自定义的注入 -->
            <property name="role" ref="role"/>
        </bean>
        <bean id="role" class="cn.wh.vo.Role">
            <property name="id" value="1"/>
            <property name="name" value="管理员"/>
        </bean>
  • Null的注入
    <property name="name"><null/></property>
  • p命名空间注入,需要导入对应的schema头文件
    <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">

    配置:

    <!-- 使用p命名空间注入 -->
        <bean id="r1" class="cn.wh.vo.Role" p:id="1" p:name="管理员"></bean>
  • c命名空间注入,(新增功能)需要导入对应的schema头文件

    <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"
        xmlns:c="http://www.springframework.org/schema/c"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
  • c命名空间注入,其本质式构造器注入,所以需要对应的构造方法存在。
    <!-- c命名空间注入 -->
        <bean id="r2" class="cn.wh.vo.Role" c:id="1" c:name="管理员"></bean>
原文地址:https://www.cnblogs.com/forever2h/p/6740080.html