- 用戶不直接接觸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層實現的是具體的方法