Spring從入門到入土——IOC概述及推導

IoC(控制翻轉)推導

以前的代碼架構

  • 一般咱們之前實現項目的時候會分爲這麼幾步:程序員

    • 先寫一個UserDao接口
public interface UserDao {
   public void getUser();
}
    • 再去寫一個Dao的實現類
public class UserDaoImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("get");
  }
}
    • 而後去寫UserService的接口
    • 最後去寫Service的實現類(組合)
public class UserServiceImpl implements UserService {
   private UserDao userDao = new UserDaoImpl();

   @Override
   public void getUser() {
       userDao.getUser();
  }
}
    • 最後再去使用它(測試)。
@Test
public void test(){
   UserService service = new UserServiceImpl();
   service.getUser();
}

上面就是咱們之前實現一個功能的總體邏輯,也算是很清晰,可是存在着一個問題,即由程序員來控制代碼的生成,對於每次的需求變動咱們都須要去改動咱們相應的代碼,牽一髮而動全身,並且這樣代碼的耦合性過高了。架構

IOC的理念

爲了解決由於需求的改動而頻繁去更改代碼,咱們在須要用到它的地方不去實現它,而是利用set提供一個接口。這樣咱們把建立對象的主動權交給了調用者即控制翻轉。程序不用去管如何建立以及實現的,只須要提供一個接口。讓調用者來決定,框架

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    // 利用set來進行動態實現值的注入
    public void setUserDao(UserDao userDao){
        this.UserDao=userDao;
    }
}

IoC本質

控制反轉(IoC),是一種設計思想,DI(依賴注入)是實現IoC的一種方法。ide

  • Ioc是Spring框架的核心內容,使用多種方式完美的實現了IoC,可使用XML配置也可使用註解,新版本的Spring也能夠零配置實現IoC
  • Spring容器在初始化時先讀配置文件、根據配置文件或元數據建立於組織對象存入容器中,程序使用時再從IoC容器中取出須要的對象。
    image

​ 採用XML方式配置Bean的時候,Bean的定義信息是和實現分離的,而採用註解的方式能夠把二者合爲一體,Bean的定義信息直接以註解的形式定義在實現類中,從而達到了零配置的目的。測試

  • 控制反轉是一種經過描述(XML或註解)並經過第三方去生產或獲取特定對象的方式。在Spring中實現控制反轉的是IoC容器,其實現方法是依賴注入(Dependency Injection,DI)

最後

  • 第一次發表,若是親們以爲看完有收穫,但願能給我點個贊,這將會是我更新的最大動力,感謝各位的支持。
  • 若是文章有錯誤,但願聯繫我指正,還望多多關注、轉發!