Spring中對於IOC的理解

  • 用戶不直接接觸dao,用戶接觸的是service,service中使用了dao
  • 創建dao接口,創建dao接口的實現類(將方法補充)
  • 創建service接口,創建service接口的實現類,在這個實現類中就會使用dao接口,從而實現dao實現類中的方法

1.UserDao接口

public interface UserDao {
    public void getUser();
}

2.UserDaoImpl實現類

public class UserDaoImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("獲取用戶數據");
    }
}

3.UserService業務接口

public interface UserService {
    public void getUser();
}

4.UserServiceImpl業務實現類

public class UserServiceImpl implements UserService{
    private UserDao userDao=new UserDaoImpl();
    @Override
    public void getUser() {
        userDao.getUser();
    }
}

在我們之前的業務中,用戶的需求可能會直接影響我們原來的代碼,我們需要根據用戶的需求去修改源代碼!如果程序代碼量十分大,修改一次的成本代價十分昂貴!

我們使用一個Set接口實現,已經發生了革命性的變化

public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void getUser() {
        userDao.getUser();
    }

}

之前是程序主動創建對象,控制權在開發者手中!
使用了set注入以後,程序不再具有主動性,而是變成了被動的接受對象!

以前所有東西都是由程序去進行控制創建 , 而現在是由我們自行控制創建對象 , 把主動權交給了調用者 . 程序不用去管怎麼創建,怎麼實現了 . 它只負責提供一個接口 .

這種思想 , 從本質上解決了問題 , 我們程序員不再去管理對象的創建了 , 更多的去關注業務的實現 . 耦合性大大降低 . 這也就是IOC的原型 !

IOC本質
控制反轉IoC(Inversion of Control),是一種設計思想,DI(依賴注入)是實現IoC的一種方法,也有人認爲DI只是IoC的另一種說法。沒有IoC的程序中 , 我們使用面向對象編程 , 對象的創建與對象間的依賴關係完全硬編碼在程序中,對象的創建由程序自己控制,控制反轉後將對象的創建轉移給第三方,個人認爲所謂控制反轉就是:獲得依賴對象的方式反轉了。

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

採用XML方式配置Bean的時候,Bean的定義信息是和實現分離的,而採用註解的方式可以把兩者合爲一體,Bean的定義信息直接以註解的形式定義在實現類中,從而達到了零配置的目的。
控制反轉是一種通過描述(XML或註解)並通過第三方去生產或獲取特定對象的方式。在Spring中實現控制反轉的是IoC容器,其實現方法是依賴注入(Dependency Injection,DI)。

對於ioc的理解:

  • dao接口寫好以後,寫它的daoimpl實現類
  • daoimpl實現類 -填充方法體
  • 業務接口寫好以後,寫它的serviceimpl實現類
  • serviceimpl實現類-填充方法體(除了繼承,還要寫set)
  • 在bean裏面需要將daoimpl全部寫成bean
  • 在寫業務impl的bean時需要將參數,set需要的參數寫成property
  • 業務層只承擔調用dao層,dao層實現的是具體的方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章