Spring学习:DI的配置

Posted 君子藏器于身,伺时而动。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习:DI的配置相关的知识,希望对你有一定的参考价值。

一.  一些概念

  应用程序中说的依赖一般指类之间的关系。

  泛化:表示类与类之间的继承关系、接口与接口之间的继承关系;

  实现:表示类对接口的实现;

  依赖:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。

  关联:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示;

  聚合:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;

  组合:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;

  Spring IOC容器的依赖有两层含义:Bean依赖容器管理生命周期和Bean依赖容器注入Bean的依赖资源。Bean依赖容器:Bean依赖IOC容器创建Bean并管理Bean的生命周期。Bean依赖容器注入Bean的依赖资源:容器负责注入Bean的依赖资源,依赖资源可以使Bean、外部文件、常量等,在java中都反应为对象,并且由容器负责组装Bean之间的依赖关系。

  依赖注入的好处:(1)更好实践面向接口编程,代码清晰,可以动态替换bean依赖对象(外部资源)。(2)增加Bean的复用性、降低Bean之间的耦合。

二.  注入

  注入的方式有两种:构造器注入和setter注入。

  构造器注入:

    <!-- 构造器注入 静态工厂实例化注入、实例工厂实例化注入省略-->
    <bean id="dIHelloService1" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
        <!-- 参数索引注入 -->
        <constructor-arg index="0" value="Hello World,DI"/>
        <constructor-arg index="1" value="1"/>
    </bean>
    <bean id="dIHelloService2" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
        <!-- 参数名注入 bean构造器注入-->
        <constructor-arg name="msg" value="Hello World,DI"/>
        <constructor-arg name="size" value="2"/>
        <constructor-arg name="city" ref="city"/>
    </bean>
    <bean id="dIHelloService3" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
        <!--参数类型 -->
        <constructor-arg type="java.lang.String" value="Hello World,DI"/>
        <constructor-arg type="java.lang.Integer" value="3"/>
    </bean>

  setter注入,包含一些数据类型注入的演示(构造器注入也可以):

    <!-- setter方法注入 bean的setter方法 -->
    <bean id="dIHelloService4" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
        <!-- 注入不同的数据类型实例 -->
        <!-- 注入常量 -->
        <property name="msg" value="Hello World,DI"/>
        <property name="size" value="4"/>
        <!-- 注入Bean  setter注入-->
        <property name="city" ref="city"/>
        <property name="city2">
            <ref bean="city"/>
        </property>
        <!-- 注入List-->
        <property name="list" >
            <list value-type="java.lang.String">
                <value>张三</value>
                <value>李四</value>
                <value>王五</value>
            </list>
        </property>
        <!-- 注入Set-->
        <property name="set">
            <set value-type="java.lang.String">
                <value>张三S</value>
                <value>李四S</value>
                <value>王五S</value>
            </set>
        </property>
        <!-- 二维数组注入-->
        <property name="twoDiList">
            <array>
                <array>
                    <value>1</value>
                    <value>2</value>
                </array>
                <array>
                    <value>5</value>
                </array>
            </array>
        </property>
        <!-- Map注入 -->
        <property name="map">
            <map key-type="java.lang.String" value-type="java.lang.String">
                <entry>
                    <key>
                        <value>厦门</value>
                    </key>
                    <value>0592</value>
                </entry>
                <entry>
                    <key>
                        <value>泉州</value>
                    </key>
                    <value>05995</value>
                </entry>
            </map>
        </property>
        <!-- 注入java.util.Properties-->
        <property name="properties">
            <props>
                <prop key="1">李四</prop>
                <prop key="2">张三</prop>
            </props>
        </property>
        <!-- null值处理-->
        <property name="times">
            <null/>
        </property>
    </bean>
    <bean id="city" class="self.springmvc.diConfig.entity.City">
        <property name="code" value="350300"></property>
        <property name="name" value="XiaMen"></property>
    </bean>

  bean的注入:

    <!-- bean的注入-->
    <!-- 构造器注入-->
    <bean id="dIHelloService5" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
        <constructor-arg ref="city" name="city"></constructor-arg>
    </bean>
    <!-- setter注入 -->
    <bean id="dIHelloService6" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
        <property name="city">
            <ref bean="city"></ref>
        </property>
    </bean>

    <!-- 内部bean定义,对外部不可见-->
    <bean id="dIHelloService7" class="self.springmvc.diConfig.service.impl.HelloServiceImpl">
        <property name="city">
            <bean class="self.springmvc.diConfig.entity.City"/>
        </property>
    </bean>

  

以上是关于Spring学习:DI的配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring学习Spring配置与DI依赖注入

[原创]java WEB学习笔记97:Spring学习---Spring 中的 Bean 配置:IOC 和 DI

Spring万字详解DI相关内容,一文掌握DI配置与使用

spring学习

Spring的学习二(Spring Ioc和DI,AOP简介)

Spring掌握IOC/DI配置管理第三方bean