大数据WEB阶段Spring框架(一)IOC控制反转、DI注入依赖

Spring-IOC、DI

零、Spring简介

一、Spring-IOC控制反转

  1. 什么是IOC?

    • 把对象的创建、初始化、销毁等工作交给Spring容器来做。
    • Spring容器控制对象的生命周期。
    • 以前: Person p1 = new Person(); 手动的创建对象
    • 现在: Person p1 = Spring容器.get***(); Spring容器来创建
    • 说明:通过Spring容器来管理对象更加简单,不用关心对象的创建过程!!
      解耦!
    • 用IOC来创建对象

      1. 具体步骤

        1.先导入Spring相关JAR包
        2.创建对象类
        3.编辑xml配置文件

二、依赖注入

  1. 用Set方法给对象赋值
    1. 一定要有set方法 , 否则会报错
  2. 用构造函数给对象赋值 , 注意bean中一定要有application.xml文件中配置的属性对应的构造函数
  3. 示例:

        public class Person {
            private Student student;
            private int number;
            private String str;
            private List list;
            private Set set;
            private Map map;
            private Properties properties;
    
        }
    
        <!-- set方式注入 -->
        <bean id="person" class="domain.Person">
                <!-- property属性     name="student" ref="student"引用的名称 -->
                <!-- 对象要有set方法  如果没有set方法会报错 -->
                <!-- <property name="student" ref="student"></property> -->
                <property name="student">
                    <ref bean="student"/>
                </property>
    
                <!--注入基本类型  -->
                <property name="number" value="2016"></property>
    
                <!--注入String  -->
                <property name="str" value="我是一只小小小小鸟"></property>
    
                <!--注入List  -->
                <property name="list" >
                    <list>
                        <value>111</value>
                        <value>想要飞啊飞,飞的更好</value>
                        <ref bean="student"/>
                    </list>
                </property>
    
                <!--注入set  -->
                <property name="set">
                    <set>
                        <value>111</value>
                        <value>111</value>
                        <value>你是我的优乐美</value>
                        <ref bean="student"/>
                    </set>
                </property>
    
                <!--注入MAP -->
                <property name="map">
                    <map>
                        <entry key="1" value="上路英雄"></entry>
                        <entry key="2" value="大野英雄"></entry>
                        <entry key="3" value="中单英雄"></entry>
                        <entry key="4" value="ADC"></entry>
                        <entry key="5" value="辅助"></entry>
                        <entry key="student" value-ref="student"></entry>
                    </map>
                  <!--map的实现有序是LinkedHashMap -->
                </property>
    
                <!--注入propertys -->
                <property name="properties">
                    <props>
                        <prop key="p1">你好</prop>
                        <prop key="p2">订单</prop>
                        <prop key="p3">333</prop>
                    </props>
                </property>
            </bean>
            <bean id="student" class="domain.Student"></bean>
        <!-- 构造函数方式注入 -->
         <bean id="person" class="domain.Person">
                <!--构造方法赋值  
                index="参数位置" 从0开始 
                name=""        参数的名称
                type=""        参数类型 
                value="基本类型" ref="引用类型"
                  -->
                <!-- 测试一个参数的构造器赋值-->
                <constructor-arg index="0" name="student" ref="student"></constructor-arg>
                <constructor-arg index="1" name="number" value="100"></constructor-arg>
                <constructor-arg index="2" name="str" value="刘昱江"></constructor-arg>
                <constructor-arg name="list">
                    <list>
                        <value>sss</value>
                        <value>刘昱江</value>
                    </list>
                </constructor-arg>
            index和 name配置一个即可 , 但是通常使用index , 因为项目改动时形参名可能会变
    

三、IOC和DI的意义

  • 传统的mvc思想中代码的侵入性特别强,紧耦合,如果想换实现类,只能修改代码完成。所以IOC和DI的出现解决了这个问题。实现代码的松耦合。真正意义上的面向切面编程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值