Derivación de la teoría Spring Framework-IOC

Derivación teórica de la COI

Acciones para crear un proyecto antes de Sping

1.UserDao 				接口
2.UserDaoImpl 			实现类
3.UserService 			业务接口
4.UserServiceImpl		业务实现类

Crear un nuevo proyecto maven

Archivo->nuevo->proyecto

inserte la descripción de la imagen aquí

Seleccione el proyecto maven -> siguiente

inserte la descripción de la imagen aquí

Modifícalo a tu gusto

inserte la descripción de la imagen aquí

Importe el paquete jar en el archivo pom.xml

Recuerde modificar la ubicación del repositorio de maven
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

eliminar archivo src

inserte la descripción de la imagen aquí
Después de eliminar:
inserte la descripción de la imagen aquí

Objetivo:

Para construir subproyectos, se pueden gestionar muchas cosas en un proyecto

Crear un nuevo módulo

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

El proceso de proyecto antes de la aparición de Spring

1. Nuevo paquete: com.kuang.dao

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

2. Crear una nueva interfaz UserDao

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3. Agregue un método a la interfaz UserDao

inserte la descripción de la imagen aquí

package com.kuang.dao;

public interface UserDao {
    
    
    void getUser();
}

4. Cree una clase de implementación UserDaoImpl de la interfaz UserDao

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

package com.kuang.dao;

public class UserDaoImpl implements UserDao{
    
    

    @Override
    public void getUser() {
    
    
        System.out.println("默认获取用户的数据");
    }
}

5. Cree una clase de implementación UserDaoMysqlImpl de la interfaz UserDao

package com.kuang.dao;

public class UserDaoMysqlImpl implements UserDao{
    
    

    @Override
    public void getUser() {
    
    
        System.out.println("默认获取mysql的数据");
    }
}

6. Cree una clase de implementación UserDaoOracleImpl de la interfaz UserDao

package com.kuang.dao;

public class UserDaoOracleImpl implements UserDao{
    
    

    @Override
    public void getUser() {
    
    
        System.out.println("默认获取oracle的数据");
    }
}

7. Crear el paquete com.kuang.service

inserte la descripción de la imagen aquí

8. Crear interfaz de servicio de usuario

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

9. Cree la clase de implementación de la interfaz UserService UserServiceImpl

inserte la descripción de la imagen aquí

package com.kuang.service;

import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoImpl;

/*
* 业务层(service层)调用数据访问层(dao层)
*
* java中除了继承还有组合的概念
* */
public class UserServiceImpl implements UserService{
    
    

//    将UserDao引入UserService
    private UserDao userDao = new UserDaoImpl();

    @Override
    public void getUser() {
    
    
		//调用
        userDao.getUser();
    }
}

10. Prueba

Cree la clase myTest en el paquete de prueba
inserte la descripción de la imagen aquí

Código:

import com.kuang.service.UserService;
import com.kuang.service.UserServiceImpl;

public class myTest {
    
    
    public static void main(String[] args) {
    
    
       //用户实际调用的是业务层,dao层用户不需要接触
        UserService userService= new UserServiceImpl();

//        用户调用业务层的getUser方法
        userService.getUser();
    }
}

Resultados de la prueba
inserte la descripción de la imagen aquí

Agregue una implementación de mysql en la capa Dao

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

El código de la capa de servicio necesita ser cambiado

package com.kuang.service;

import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoImpl;
import com.kuang.dao.UserDaoMysqlImpl;

/*
* 业务层(service层)调用数据访问层(dao层)
*
* java中除了继承还有组合的概念
* */
public class UserServiceImpl implements UserService{
    
    

//    将UserDao引入UserService
//    private UserDao userDao = new UserDaoImpl();

//    要想实现UserDaoMysqlImpl,private UserDao userDao = new UserDaoImpl();需要修改为下面的
        private UserDao userDao = new UserDaoMysqlImpl();

    @Override
    public void getUser() {
    
    

        userDao.getUser();
    }
}

inserte la descripción de la imagen aquí

Resultados de la prueba

inserte la descripción de la imagen aquí

Siempre que cambie la solicitud del usuario, la capa de servicio debe cambiarse manualmente. El programa no puede adaptarse a los cambios del usuario.

Optimización: use el conjunto para implementar dinámicamente la inyección de valor

Solo necesita cambiar el código de la capa UserDaoServiceImpl

package com.kuang.service;

import com.kuang.dao.UserDao;
import com.kuang.dao.UserDaoImpl;
import com.kuang.dao.UserDaoMysqlImpl;

/*
* 业务层(service层)调用数据访问层(dao层)
*
* java中除了继承还有组合的概念
* */
public class UserServiceImpl implements UserService{
    
    

//    将UserDao引入UserService
//    private UserDao userDao = new UserDaoImpl();

//    要想实现UserDaoMysqlImpl,private UserDao userDao = new UserDaoImpl();需要修改为下面的
//        private UserDao userDao = new UserDaoMysqlImpl();

    private  UserDao userDao;

    //利用set方法进行动态实现值的注入
    public void setUserDao(UserDao userDao) {
    
    
        this.userDao = userDao;
    }

    @Override
    public void getUser() {
    
    

        userDao.getUser();
    }
}

inserte la descripción de la imagen aquí

prueba

import com.kuang.dao.UserDaoMysqlImpl;
import com.kuang.service.UserService;
import com.kuang.service.UserServiceImpl;

public class myTest {
    
    
    public static void main(String[] args) {
    
    
       //用户实际调用的是业务层,dao层用户不需要接触
        UserService userService= new UserServiceImpl();

        ((UserServiceImpl)userService).setUserDao(new UserDaoMysqlImpl());
//        用户调用业务层的getUser方法
        userService.getUser();

    }
}

inserte la descripción de la imagen aquí

在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!
如果程序代码量非常大,修改一个代码的成本十分昂贵

Usamos una implementación de interfaz Set, el código ha cambiado revolucionario

private  UserDao userDao;

    //利用set方法进行动态实现值的注入
    public void setUserDao(UserDao userDao) {
    
    
        this.userDao = userDao;
    }

● Antes: ¡el programa está creando objetos activamente! El control está en manos del programador.

● Después de usar la inyección de conjuntos, el programa ya no tiene la iniciativa, ¡sino que se convierte en un objeto receptor pasivo!

Este tipo de pensamiento resuelve el problema en esencia, los programadores no necesitan gestionar la creación de objetos, el acoplamiento del sistema se reduce considerablemente y pueden centrarse más en la implementación empresarial.

A modo de archivo de configuración

Los pasos anteriores 1-9 permanecen sin cambios
, y luego crea un nuevo beans.xml en el paquete de recursos
inserte la descripción de la imagen aquí

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="mysqlImpl" class="com.kuang.dao.UserDaoMysqlImpl" />
   <bean id="oracleImpl" class="com.kuang.dao.UserDaoOracleImpl" />

   <bean id="UserServiceImpl" class="com.kuang.service.UserServiceImpl">
<!--      ref:引用Spring中创建好的对象
          value:具体的值,基本数据类型
           -->
      <property name="userDao" ref="oracleImpl" />

   </bean>


</beans>

prueba:
inserte la descripción de la imagen aquí

import com.kuang.dao.UserDaoMysqlImpl;
import com.kuang.service.UserService;
import com.kuang.service.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class myTest {
    
    
    public static void main(String[] args) {
    
    

        //获取ApplicationContext:拿到Spring的容器
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        UserServiceImpl userServiceImpl = (UserServiceImpl)context.getBean("UserServiceImpl");
        userServiceImpl.getUser();
    }
}

Supongo que te gusta

Origin blog.csdn.net/Silly011/article/details/123880446
Recomendado
Clasificación