天天看點

spring 控制反轉IoC

IoC 控制反轉

控制反轉(Inversion of Control,縮寫為IoC),是面向對象程式設計中的一種設計原則,可以用來減低計算機代碼之間的耦合度。常用的方法有“依賴注入”,“依賴查找”。

分析實作

  1. 先寫一個Dao接口
public interface UserDao {
    void getUser();
}
           
  1. 再去寫Dao的實作類
public class UserDaoImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("預設擷取使用者的資料");
    }
}
           
  1. 然後去寫UserService的接口
public interface UserService {
    void getUser();
}
           
  1. 最後實作service的實作類
UserDao userDao = new UserDaoImpl();
    @Override
    public void getUser() {
        userDao.getUser();
    }
           
  1. 測試一下
@Test
    public void userTest() {
        UserServiceImpl userService = new UserServiceImpl();
        userService.getUser();
    }
           

上面是原來的方式,下面通過增加實作類測試

  1. 增加一個Dao的實作類
public class UserDaoMysqlImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("Mysql擷取使用者資料!!!!");
    }
}
           
  1. 變更service的實作類
UserDao userDao = new UserDaoMysqlImpl();
    @Override
    public void getUser() {
        userDao.getUser();
    }
           

接下來通過IoC的方式

  1. 變更service的實作類
public class UserServiceImpl implements UserService{
    private UserDao userDao;

    //利用set進行動态實作值的注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void getUser() {
        userDao.getUser();
    }
}
           
  1. 測試
//控制反轉IoC的測試
    @Test
    public void iocTest() {
        UserService userService = new UserServiceImpl();

        ((UserServiceImpl)userService).setUserDao(new UserDaoImpl());
        userService.getUser();

    }