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关键字来创建对象,通过对象 才能 获取对应的方法或者属性。
      第二种 是有了新的耦合
       

 

 

 

 

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