初識IoC基礎

重要性:IoC是Spring框架的控制反轉容器。
spring官方文檔核心技術第一節概述就是講解Ioc容器
在這裏插入圖片描述

IoC實質:

容器通過讀取配置元數據來獲取有關要實例化,配置和組裝哪些對象的指令
在這裏插入圖片描述

下面就具體的操作了解IoC容器

1.先寫一個UserDao接口

public interface UserDao {
    public void getUser();
}

2.再去寫Dao的實現類

public class UserDaoImpl implements UserDao {
    public void getUser() {
        System.out.println("獲取默認數據!");
    }
}

3.然後寫一個UserService接口

public interface UserService {
    public void getUser();
}

4.最後寫Service實現類

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

5.測試:

public class MyTest {
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        userService.getUser();
    }
}

假設我們現在以下幾個Dao的實現類。如果要使用任意一個

public class UserDaoMysqlImpl  implements UserDao{
    public void getUser() {
        System.out.println("獲取Mysql的數據!");
    }
}

public class UserDaoOracleImpl implements UserDao {
    public void getUser() {
        System.out.println("獲取Oracle的數據!");
    }
}

public class UserDaoServerImpl implements UserDao {
    public void getUser() {
        System.out.println("獲取Server的數據!");
    }
}

問題:如果我們要使用任意一個實現類會比較繁瑣 每次都要修改代碼,根據使用的對象,每次的對象也不同。如何解決呢?不放試試set注入
只需要修改Service接口、測試類代碼如下:

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    //這裏的set方法可以比較java的set方法,只不過傳進去的參數是一個對象而已,需要對象那麼在測試的時候我們就new 對象
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
    public void getUser() {
        userDao.getUser();
    }
}
public class MyTest {
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        //setUserDao();參數是使用的那個類
        userService.setUserDao(new UserDaoServerImpl());
        userService.getUser();
    }
}

set注入個人的一些解釋:
場景:兩個座標進行相加,判斷用戶傳入的參數可能都是什麼?

public class Point {
    private int row;
    private int col;

   //有參構造方法
    public Point(int row, int col) {
        this.row = row;
        this.col = col;
    }

    //調用自身的有參構造方法
    public Point() {
        this(0, 0);
    }

    public Point(Point point) {
       this.col=point.getCol();
       this.row=point.getRow();
   }

   public Point(Point point1, Point point2) {
        this.row=(point1.getRow()+point2.getRow());
        this.col=(point1.getCol()+point2.getCol());
   }
   public Point(int row) {
        this.row=row;
   }

    public int getRow() {
        return row;
    }

    public void setRow(int row) {
        this.row = row;
    }

    public int getCol() {
        return col;
    }

    public void setCol(int col) {
        this.col = col;
    }

    public Point add(int row, int col, int row1, int col1) {
        Point point = new Point();
        point.setRow(row+row1);
        point.setCol(col+col1);
        return point;
    }

    public Point add(Point point1, Point point2) {
        Point pt = new Point();
        pt.setRow(point1.getRow()+point2.getRow());
        pt.setCol(point1.getCol()+point2.getCol());
        return pt;
    }

    public Point add(Point point) {
        this.setCol(point.getCol());
        this.setRow(point.getRow());
        return point;
    }
  
    public String toString() {
        return String.valueOf("座標row="+row+" 座標col="+col);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章