- UserDao接口
- UserDaoImpl實現類
- UserService業務接口
- UserServiceImpl業務實現類
在之前的業務中,用户的需求可能會影響我們的代碼,我們需要根據用户的需求去修改代碼!如果程序代碼量非常大,修改一次的成本代價十分昂貴!
UserServiceImpl使用set接口
private UserDao userDao;
//利用set進行動態實現值的注入
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
- 之前程序是主動創建對象,控制權在程序員手裏
- 使用set注入後,程序不再具有主動性,而是變成了被動的接受對象
這種思想,從本質上解決了問題,程序員不需要再去管理對象的創建了,系統的耦合性大大降低,可以更加專注的在業務實現上。這就是IOC的原型。
IOC本質
控制反轉IoC(Inversion of Control),是一種設計思想,DI(依賴注入)是實現IoC的一種方法,也有人認為DI只是IoC的另一種説法。沒有IoC的程序中,我們使用面向對象編程,對象的創建與對象間的依賴關係完全硬編碼在程序中,對象的創建由程序自己控制,控制反轉後將對象的創建轉移給第三方。
採用xml方式配置Bean的時候,Bean的定義信息是和實現分離的,而採用註解的方式可以把兩者合為一體,Bean的定義信息直接以註解的形式定義在實現類中,從而達到了零配置的目的。
控制反轉是一種通過描述(xml或註解)並通過第三方去生產或獲取特定對象的方式。在Spring中實現控制反轉的是IoC容器,其實現方法是依賴注入(Dependency Injection,DI)。