[1] Descripción general de Spring, derivación de la teoría de IoC

Primavera

1. Resumen de primavera

1.1 Introducción

Spring: Spring—> Trae la primavera a la industria del software

En 2002, Rod Jahnson lanzó por primera vez el marco de interfaz 21 prototipo del marco Spring.

El 24 de marzo de 2004, el marco Spring, basado en el marco interface21, fue rediseñado y lanzó la versión oficial 1.0.

Es difícil imaginar el título de Rod Johnson, es un doctor de la Universidad de Sydney, sin embargo, su especialidad no es informática, sino música.

Concepto Spring: hacer que la tecnología existente sea más práctica. Es una mezcolanza en sí misma, que integra la tecnología marco existente

Sitio web oficial: http://spring.io/

Dirección de descarga oficial: https://repo.spring.io/libs-release-local/org/springframework/spring/

GitHub: https://github.com/spring-projects

Yo uso maven aquí, solo ve al almacén de maven para copiar las dependencias

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.0</version>
    </dependency>
</dependencies>

1.2, ventajas

Spring es un contenedor de código abierto y marco gratuito.

2.Spring es un marco liviano, no intrusivo.

3. Inversión de control IoC, Aop presencial

4. Soporte para cosas, soporte para marcos

...

Resumen de una oración:

Spring es un contenedor ligero de inversión de control (IoC) y orientado a aspectos (AOP) (marco).

1.3 Composición

Inserte la descripción de la imagen aquí

El marco Spring es una arquitectura en capas que consta de 7 módulos bien definidos. El módulo Spring se basa en el contenedor principal, que define la forma de crear, configurar y administrar beans.

Inserte la descripción de la imagen aquí

Cada módulo (o componente) que compone el marco Spring puede existir solo o implementarse en combinación con uno o más módulos. Las funciones de cada módulo son las siguientes:

  • Contenedor principal : el contenedor principal proporciona las funciones básicas del marco Spring. El componente principal del contenedor principal es BeanFactory, que es una implementación del patrón de fábrica. BeanFactory utiliza el modelo de inversión de control (IOC) para separar las especificaciones de configuración y dependencia de la aplicación del código de la aplicación real.
  • Contexto de Spring : el contexto de Spring es un archivo de configuración que proporciona información de contexto al marco de Spring. El contexto de Spring incluye servicios empresariales como JNDI, EJB, correo electrónico, internacionalización, verificación y funciones de programación.
  • Spring AOP : a través de la función de administración de configuración, el módulo Spring AOP integra directamente funciones de programación orientadas a aspectos en el marco Spring. Por lo tanto, puede hacer que el marco Spring administre fácilmente cualquier objeto que admita AOP. El módulo Spring AOP proporciona servicios de gestión de transacciones para objetos en aplicaciones basadas en Spring. Al utilizar Spring AOP, puede integrar la gestión de transacciones declarativas en su aplicación sin depender de los componentes.
  • Spring DAO : la capa de abstracción JDBC DAO proporciona una jerarquía de excepciones significativa que se puede usar para administrar el manejo de excepciones y los mensajes de error lanzados por diferentes proveedores de bases de datos. La jerarquía de excepciones simplifica el manejo de errores y reduce en gran medida la cantidad de código de excepción que debe escribirse (como abrir y cerrar conexiones). Las excepciones orientadas a JDBC de Spring DAO siguen la jerarquía general de excepciones de DAO.
  • Spring ORM : Spring Framework inserta varios marcos ORM, proporcionando así herramientas relacionales de objetos ORM, incluyendo JDO, Hibernate e iBatis SQL Map. Todos estos siguen la transacción general de Spring y la jerarquía de excepciones DAO.
  • Módulo Spring Web : el módulo de contexto web se construye sobre el módulo de contexto de la aplicación para proporcionar contexto para las aplicaciones basadas en la web. Por lo tanto, el marco de Spring admite la integración con Jakarta Struts. El módulo web también simplifica el trabajo de manejar solicitudes de varias partes y vincular parámetros de solicitud a objetos de dominio.
  • Spring MVC framework : MVC framework es una implementación MVC con todas las funciones para crear aplicaciones web. A través de la interfaz de estrategia, el marco MVC se vuelve altamente configurable MVC se adapta a una gran cantidad de tecnologías de visualización, incluidas JSP, Velocity, Tiles, iText y POI.

1.4, extensión

Spring Boot 与 Spring Cloud

  • Spring Boot es un conjunto de andamios de configuración rápida para Spring, que puede desarrollar rápidamente un único microservicio basado en Spring Boot;
  • Spring Cloud se basa en Spring Boot;
  • Spring Boot se enfoca en un solo individuo de microservicio que es rápido y fácil de integrar, y Spring Cloud se enfoca en el marco de gobierno de servicio global;
  • Spring Boot utiliza el concepto de restricción sobre la configuración. Se han seleccionado muchas soluciones de integración para usted. Puede configurarlo sin configuración. Una gran parte de Spring Cloud se implementa en base a Spring Boot. Spring Boot se puede usar y desarrollar independientemente de Spring Cloud .Proyecto, pero Spring Cloud es inseparable de Spring Boot, que es una relación de dependencia.
  • SpringBoot juega un papel de conexión en SpringClound. Si desea aprender SpringCloud, debe aprender SpringBoot.

Inserte la descripción de la imagen aquí

2. Derivación de la teoría del COI

Conceptos básicos del COI

Crea un proyecto maven en blanco

2.1, análisis y realización

Escribe un fragmento de código de la forma original:

1. Escriba primero una interfaz de UserDao

public interface UserDao {
    
    
   public void getUser();
}

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

public class UserDaoImpl implements UserDao {
    
    
   @Override
   public void getUser() {
    
    
       System.out.println("获取用户数据");
  }
}

3. Luego escribe la interfaz de UserService

public interface UserService {
    
    
   public void getUser();
}

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

public class UserServiceImpl implements UserService {
    
    
   private UserDao userDao = new UserDaoImpl();

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

5. Pruébalo

@Test
public void test(){
    
    
   UserService service = new UserServiceImpl();
   service.getUser();
}

Esta es nuestra forma original. Al principio, todos escribían de la misma forma, ¿no? Modifiquémoslo ahora.

Agregue una clase de implementación Userdao.

public class UserDaoMySqlImpl implements UserDao {
    
    
   @Override
   public void getUser() {
    
    
       System.out.println("MySql获取用户数据");
  }
}

A continuación, si queremos usar MySql, necesitamos modificar la implementación correspondiente en la clase de implementación del servicio.

public class UserServiceImpl implements UserService {
    
    
   private UserDao userDao = new UserDaoMySqlImpl();

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

En la hipótesis, agregaremos otra clase de implementación de Userdao.

public class UserDaoOracleImpl implements UserDao {
    
    
   @Override
   public void getUser() {
    
    
       System.out.println("Oracle获取用户数据");
  }
}

Entonces queremos usar Oracle, y necesitamos modificar la implementación correspondiente en la clase de implementación del servicio. Asumiendo que nuestras necesidades son muy grandes, este método no es aplicable en absoluto, e incluso antihumano, cierto, cada cambio requiere mucho de modificación del Código El acoplamiento de este diseño es demasiado alto y afecta a todo el cuerpo.

Entonces, ¿cómo lo resolvemos?

No podemos implementarlo donde necesitemos usarlo, pero dejamos una interfaz, usamos set, vamos al código para modificarlo.

public class UserServiceImpl implements UserService {
    
    
   private UserDao userDao;
// 利用set实现
   public void setUserDao(UserDao userDao) {
    
    
       this.userDao = userDao;
  }

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

Ahora ve a nuestra clase de prueba para probar;

@Test
public void test(){
    
    
   UserServiceImpl service = new UserServiceImpl();
   service.setUserDao( new UserDaoMySqlImpl() );
   service.getUser();
   //那我们现在又想用Oracle去实现呢
   service.setUserDao( new UserDaoOracleImpl() );
   service.getUser();
}

¿Has notado la diferencia? Quizás mucha gente dice que no hay diferencia. Pero compañeros de clase, han experimentado un cambio fundamental y muchos lugares son diferentes. Piénsalo bien, antes todo estaba controlado y creado por programas, y ahora controlar la creación del objeto por nosotros mismos, y darle la iniciativa al llamador. El programa no tiene que preocuparse de cómo crearlo o cómo implementarlo, solo es responsable de proporcionar una interfaz.

Este tipo de pensamiento resuelve esencialmente el problema. Los programadores ya no gestionamos la creación de objetos, y prestamos más atención a la realización de negocios. El acoplamiento se reduce considerablemente. ¡Este es el prototipo de IOC!

2.2 La esencia de la COI

IoC (Inversion of Control) es una idea de diseño. DI (Dependency Injection) es una forma de implementar IoC. Algunas personas piensan que DI es solo otro término para IoC. En un programa sin IoC, utilizamos programación orientada a objetos. La creación de objetos y las dependencias entre objetos están completamente codificadas en el programa. La creación de objetos es controlada por el propio programa. Después de la inversión de control, la creación de objetos se transfiere a un tercero, personal Se cree que la llamada inversión de control es: se invierte la forma de obtener objetos dependientes.

Inserte la descripción de la imagen aquí

IoC es el contenido central del marco de Spring. IoC se implementa perfectamente en una variedad de formas. Puede usar configuración XML o anotaciones. La nueva versión de Spring también puede implementar IoC sin configuración.

El contenedor Spring primero lee el archivo de configuración cuando se inicializa, crea y organiza objetos de acuerdo con el archivo de configuración o metadatos y los almacena en el contenedor, y luego saca los objetos requeridos del contenedor Ioc cuando se usa el programa.

Inserte la descripción de la imagen aquí

Al configurar el Bean en modo XML, la información de definición del Bean se separa de la implementación, y las dos se pueden integrar en forma de anotaciones. La información de definición del Bean se define directamente en la clase de implementación en forma de anotaciones , logrando así cero El propósito de la configuración.

La inversión de control es una forma de producir u obtener objetos específicos a través de la descripción (XML o anotación) y a través de un tercero. Es el contenedor IoC que implementa la inversión de control en Spring, y su método de implementación es Dependency Injection (DI).

Supongo que te gusta

Origin blog.csdn.net/weixin_43215322/article/details/109587288
Recomendado
Clasificación