spring之IOC

(這篇只說ioc)對於spring初學者來說,可能對ioc比較模糊,問別人“什麼叫做ioc,它做了些什麼”,得到的答案 無非是“在項目中,要用到一個類的方法或屬性時我們都是通過new創建,用了ioc,我們不用自己new,而是交給ioc幫我們創建。”這樣的回答沒有錯,若是再講一下底層實現,豈不是更明瞭。。。(躲開,我要裝X了,)--(大佬請無視---)

  • spring核心之一ioc(控制反轉)

ioc(控制反轉):(Inversion of Control,縮寫爲IoC)是面向對象編程中的一種設計原則,降低代碼之間的耦合度,spring核心之一。

我們要用到一個類的方法或者屬性時,先說一下我們之前的幾種用法。

  1. 通過new創建對象
    public class UserService(){
        public void add(){
            System.out.println("原始方法");
        }
    
    }
    
    
    public class UserController(){
        //之前我們都是通過 new 來創建UserService 來獲取方法
        UserService us = new UserService();
        us.add();
    
    }
    
        /**
          *這樣有個缺陷:如果這個UserService類名或者裏面的方法改變了,
          *那我們的controller是不是也要跟着去改動
          * 也就是我們常說的耦合度較高
         **/
    
    
    
    
                                                                                                                                   
                                                                                        //slh
  2. 工廠模式
    public class UserService{
        public void add(){
        //方法體
        }
    }
    
    public class UserController{
    
     UserService us = Factory.getService();  
        us.add(); 
    }
    
    
    
    
    public class Factory{
        //提供返回service對象的方法
    
        private static UserService getService(){
            
            return new UserService;
    
        }
    
    }
    
    //但是這樣雖然讓service和controller之間耦合降低了,
    //但是controller和 factory 之間又有了新的耦合
    
                                                                                       //slh

     

    1. ioc(低耦合)實現
      <1>創建XML配置文件
            <bean id="UserService" class ="com.sh.slh.UserService"/>
      <2>創建工廠類 使用dom4j 解析配置文件+反射
      //返回UserService的方法
      public static UserService getService(){
      
              //1.dom4j 解析文件
              //根據xml的id值,得到對應的class屬性值
      
              String classValue = "class屬性值";
      
              //反射創建類對象
              Class cl = Class.forName(classValue);
              //instance()   創建類對象
              UserService us = cl.newInstance();
      
              return us;
      
      }
      
      //降低了類間的耦合度
      
      
      
      
      
                                                                                             //slh
      

      ioc 的底層實現完畢。
      除了第一個是原始 需用new關鍵字來創建對象,通過對象 才能 獲取對應的方法或者屬性。
      第二種 是有了新的耦合
       

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章