zoukankan      html  css  js  c++  java
  • Spring学习(5):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>
    

      

  • 相关阅读:
    处理ios键盘弹出按钮点击click失效
    vue-eahars生产编译报错
    vue页面嵌套其他页面判断是否生产https
    阿里云linux安装nginx,亲测有效
    translate函数
    html表单from练习
    html 表格标签
    selenium模块简单使用
    python字符串普通操作
    浏览器的cookie的值改成字典格式
  • 原文地址:https://www.cnblogs.com/knsbyoo/p/9217494.html
Copyright © 2011-2022 走看看