IoC 控制反轉
控制反轉(Inversion of Control,縮寫為IoC),是面向對象程式設計中的一種設計原則,可以用來減低計算機代碼之間的耦合度。常用的方法有“依賴注入”,“依賴查找”。
分析實作
- 先寫一個Dao接口
public interface UserDao {
void getUser();
}
- 再去寫Dao的實作類
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("預設擷取使用者的資料");
}
}
- 然後去寫UserService的接口
public interface UserService {
void getUser();
}
- 最後實作service的實作類
UserDao userDao = new UserDaoImpl();
@Override
public void getUser() {
userDao.getUser();
}
- 測試一下
@Test
public void userTest() {
UserServiceImpl userService = new UserServiceImpl();
userService.getUser();
}
上面是原來的方式,下面通過增加實作類測試
- 增加一個Dao的實作類
public class UserDaoMysqlImpl implements UserDao{
@Override
public void getUser() {
System.out.println("Mysql擷取使用者資料!!!!");
}
}
- 變更service的實作類
UserDao userDao = new UserDaoMysqlImpl();
@Override
public void getUser() {
userDao.getUser();
}
接下來通過IoC的方式
- 變更service的實作類
public class UserServiceImpl implements UserService{
private UserDao userDao;
//利用set進行動态實作值的注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
- 測試
//控制反轉IoC的測試
@Test
public void iocTest() {
UserService userService = new UserServiceImpl();
((UserServiceImpl)userService).setUserDao(new UserDaoImpl());
userService.getUser();
}