Conociendo los conceptos básicos de IoC

Importancia: IoC es la inversión del contenedor de control del marco Spring.
La primera sección de la descripción general de la tecnología central del documento oficial de primavera es explicar el contenedor de Ioc
Inserte la descripción de la imagen aquí

Esencia de IoC:

El contenedor obtiene instrucciones sobre qué objetos instanciar, configurar y ensamblar leyendo los metadatos de configuración .
Inserte la descripción de la imagen aquí

Entendamos el funcionamiento específico del contenedor IoC.

1. Primero escriba una interfaz UserDao

public interface UserDao {
    
    
    public void getUser();
}

2. Escribe de nuevo la clase de implementación de Dao.

public class UserDaoImpl implements UserDao {
    
    
    public void getUser() {
    
    
        System.out.println("获取默认数据!");
    }
}

3. Luego, escriba una interfaz de UserService

public interface UserService {
    
    
    public void getUser();
}

4. Por último, escriba la clase de implementación del servicio.

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

5. Prueba:

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

Supongamos que ahora tenemos las siguientes clases de implementación de Dao. Si quieres usar cualquiera

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的数据!");
    }
}

问题: Si queremos usar cualquier clase de implementación, será engorroso modificar el código cada vez, dependiendo del objeto utilizado, el objeto cada vez es diferente. ¿Cómo resolverlo? No dejes irestablecer inyección
Solo es necesario modificar la interfaz de servicio, el código de prueba es el siguiente:

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 inyecta algunas explicaciones personales:
Escenario: ¿Agregar dos coordenadas para determinar cuáles podrían ser los parámetros pasados ​​por el usuario?

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);
    }
}

Supongo que te gusta

Origin blog.csdn.net/lirui1212/article/details/106342855
Recomendado
Clasificación