zoukankan      html  css  js  c++  java
  • Spring IoC原理详解

      去掌握一门技术的时候,往往很多人都忽略了一点,只是一味地去写代码,原理层面的东西从来就不理会

    还有就是学习的过程中,不去想为什么有了当前的写法,却有着这么一门技术可以代替它

      一般来说,在写程序的时候,一个类的实例创建都是直接通过 new className(); 语法来操作。说真的,

    我写程序代码都不这么去做,我只需要在程序里定义一个接口类型的属性,直接通过属性来调用接口的方法

    java代码:

     1 public class Girl_1 implements Girl {
     2     
       //定义一个接口类型的属性
        private Dog dog; 3
        //定义该属性的set方法,让Spring来调用 4 public void setDog(Dog dog) { 5 this.dog = dog; 6 } 7 8 @Override 9 public void playDog() { 10 // TODO Auto-generated method stub 11 //调用方法,实际上是调用接口的方法
          dog.bark();
    12 }
      }

      接口的实例来自于哪个Class类,在写代码的时候根本不用去理会,只需要在SpringXml配置文件中配置一下就可以了

    Spring会自动的找到ClassBean_property所引用的类实例,调用Class类中属性的set方法注入一个Class类实例

    xml代码:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans>
     3     <!-- 一个bean就是一个类的实例 -->
     4     <bean id="girl" class="springAop.Girl_1" scope="prototype">
     5     
     6         <property name="dog" ref="labrador" />
     7         <!-- 图_3所示的接口类型的dog属性 -->
     8         
     9     </bean>
    10     
    11     <!-- 通过property标签的ref属性,引用一个类的实例labrador -->
    12     <bean id="labrador" class="springAop.Labrador" scope="prototype" />    
    13     
    14     <bean id="shepherdDog" class="springInject.ShepherdDog" scope="prototype" />
    15 
    16 </beans>    

       这里就涉及到IoC了,Inversion Of Control (控制反转),这让很多人不解,被控制的是谁,反转指的又是什么,举一反三,有反转就有正转

      梦逸来告诉大家

      其实IoC真正意义上是[资源提供者],互联网上所说的控制反转中的控制也并不是一个动作,只是一个名词,所以大家不要弄混了

      Spring的xml配置文件就相当于是一个容器,它托管着整个程序中的Class类实例,通过在xml文件中定义一个bean,(上文xml代码所示)

      bean标签指定一个Class类,然后在bean节点中的property标签指定Class类定义的接口类型的属性,通过property标签的ref属性指定一个bean标

      签的id,注入一个实例给Class类中的属性。

      (PS1:一个bean就是一个类的实例;一个property就是Class类中定义的接口类型属性)

      (PS2:property的ref属性指定ClassBean的id,注入一个Class类实例给Class类中定义的接口类型属性)

     

       下面梦逸附上一张图帮助大家理解反转是怎么一回事

      上图就是反转的大致解释了,写程序的时候,一般的代码都是直接的定义一个属性,然后直接创建一个实例并赋值:Girl girl = new Girl_2();

      IoC设计模式很人性化的实现了这一点,反过来了,使用Ioc设计模式,程序代码中不再出现 new Girl_2();这种new关键字的创建实例代码

      只需要在程序中定义一个属性,属性的值是null,也就是说不用赋值,然后添加该属性的set方法,让Spring调用该属性的set方法注入一个实例

      梦逸、原创,转载请注明原文地址

  • 相关阅读:
    ubuntu16.04上安装深度学习环境
    QQ音乐付费音乐下载的demo
    python列表按比例或长度拆分
    docker 使用gpu启动及tf限额
    python apscheduler was missed by
    k8s中使用gpu的部署方案
    从字符串中找出最大的数字串,字符串中可以带小数点。--python实现
    linux中批量删除带空格的文件
    tornado中使用python3原生事件循环asyncio
    mysql DATE_FORMAT FROM_UNIXTIME 的区别
  • 原文地址:https://www.cnblogs.com/LiJinfu/p/5957291.html
Copyright © 2011-2022 走看看