Cualquiera que haya aprendido el marco de primavera debe haber oído hablar de los dos conceptos de Spring: COI (inversión de control) y DI (inyección de dependencia). Para aquellos que son nuevos en la primavera, siempre sienten que los conceptos de COI y DI son vagos y difíciles de entender. Hoy, compartiré con ustedes algunos de los expertos técnicos en línea en la comprensión de Spring Framework IOC y hablaré sobre mi comprensión del COI Spring.
¿Qué es el IOC?
IOC-inversionOfControl, es decir, "inversión de control", no es una tecnología, sino una idea de diseño. En el desarrollo de Java, el COI significa dar los objetos que diseñó para ser controlados por contenedores, en lugar de controlarlos tradicionalmente directamente dentro de sus objetos.
El COI, que es el núcleo de la primavera, corre todo el tiempo. Para el marco de primavera, Spring es responsable de controlar el ciclo de vida de un objeto y la relación entre los objetos. ¿Qué quiere decir esto? Para dar un ejemplo simple, ¿cómo encontramos una novia? Una situación común es que vamos a todas partes para ver dónde tenemos mujeres hermosas y atractivas, y luego preguntamos sobre sus intereses, números de QQ, números de teléfono, números de IP, números de coeficiente intelectual ..., encontrar formas de conocerlas, darles lo que les gusta, y luego ... este proceso es complejo y profundo, y debemos diseñar y enfrentar cada enlace nosotros mismos. Lo mismo es cierto para el desarrollo tradicional del programa. En un objeto, si desea usar otro objeto, debe obtenerlo (nuevo solo o consultar uno de JNDI). Después de su uso, el objeto debe ser destruido (como la conexión, etc.), y el objeto siempre se combinará con otras interfaces o clases.
¿Cómo entender el COI? La clave para comprender el COI es aclarar "quién controla quién, qué controla, por qué es una reversión (debería haber una positiva) y qué aspectos de la inversión están allí", analicemos en profundidad:
● ¿Quién controla quién y qué? Si bien el COI tiene un contenedor especial para crear estos objetos, es decir, el contenedor IOC controla la creación de objetos; ¿Quién controla a quién? Por supuesto, el contenedor del COI controla el objeto; ¿Qué controlar? Es decir, controla principalmente la adquisición de recursos externos (no solo objetos, incluidos archivos, etc.).
● ¿Por qué es una inversión? Qué aspectos son la inversión: hay una rotación positiva. Las aplicaciones tradicionales se controlan activamente por nosotros mismos en el objeto para obtener directamente el objeto dependiente, es decir, la rotación positiva; mientras que la inversión es el contenedor para ayudar a crear e inyectar objetos dependientes; ¿Por qué es inversión? Debido a que el contenedor nos ayuda a encontrar e inyectar objetos dependientes, el objeto solo acepta pasivamente objetos dependientes, por lo que es una inversión; ¿Qué aspectos son las inversiones? La adquisición del objeto dependiente se invierte.
Usemos Legend para ilustrar que la programación tradicional se muestra en la Figura 1-1, que crea activamente objetos relacionados y luego los combina:
Figura 1-1 Diagrama esquemático de la aplicación tradicional
Cuando tengo contenedores IOC/DI, estos objetos ya no se crean activamente en la clase de cliente, como se muestra en la Figura 1-2:
Figura 1-2 Diagrama esquemático de la estructura del programa después de que el contenedor IOC/DI tiene contenedor IOC/DI
1.1.2 ¿Qué puede hacer el COI?
El COI no es una tecnología, es solo un pensamiento, una regla importante de programación orientada a objetos, que puede guiarnos sobre cómo diseñar programas sueltos y acoplados y mejores. Las aplicaciones tradicionales son creadas activamente por nosotros dentro de la clase, lo que conduce a un alto acoplamiento entre clases y difíciles de probar; Con el contenedor del COI, el control de la creación y la búsqueda de objetos dependientes se entrega al contenedor, y el contenedor inyecta los objetos combinados, por lo que el objeto está acoplado libremente, lo que también es conveniente para las pruebas, facilita la reutilización funcional y, lo que es más importante, hace que toda la arquitectura del programa sea muy flexible.
De hecho, el mayor cambio traído por el COI a la programación no es del código, sino desde la perspectiva ideológica y el cambio de "transposición maestra-esclavo". La aplicación fue originalmente el jefe, y tomó la iniciativa de obtener cualquier recurso. Sin embargo, en la idea del COI/DI, la aplicación se volvió pasiva, y estaba esperando pasivamente que el contenedor del COI creara e inyecte los recursos que necesitaba.
El COI bien refleja una de las reglas de diseño orientado a objetos: la regla de Hollywood: "No nos busques, te buscaremos"; Es decir, el contenedor del COI ayuda al objeto a encontrar el objeto dependiente correspondiente e inyectarlo, en lugar de que el objeto lo busque activamente.
1.1.3 COI y DI
DI-DependencyInyection, es decir, "inyección de dependencia": el contenedor determina las dependencias entre componentes durante el tiempo de ejecución. En sentido figurado, el contenedor inyecta dinámicamente una cierta dependencia en el componente. El propósito de la inyección de dependencia no es traer más funciones al sistema de software, sino aumentar la frecuencia de la reutilización de componentes y construir una plataforma flexible y escalable para el sistema. A través del mecanismo de inyección de dependencia, solo necesitamos especificar los recursos requeridos por el objetivo sin ningún código para completar nuestra propia lógica comercial a través de una configuración simple, sin preocuparnos de dónde provienen los recursos específicos y quién los implementa.
Uno de los puntos clave del COI es proporcionar dinámicamente un objeto con otros objetos que necesita durante la operación del sistema. Esto se logra a través de DI (inyección de dependencia). Por ejemplo, el objeto A necesita operar la base de datos. En el pasado, siempre escribimos código en A para obtener un objeto de conexión. Con Spring, solo necesitamos decirle a Spring que se necesita una conexión en A. En cuanto a cómo construir esta conexión y cuándo construirla, A no necesita saberlo. Cuando el sistema se está ejecutando, Spring creará una conexión en el momento apropiado y luego la inyectará en una inyección similar, completando así el control de la relación entre cada objeto. Una necesidad de confiar en la conexión para ejecutarse normalmente, y esta conexión se inyecta en A por primavera, y el nombre de la inyección de dependencia proviene de esto. Entonces, ¿cómo se implementa DI? Una característica importante después de Java 1.3 es la reflexión, que permite que el programa genere dinámicamente objetos, ejecute métodos de objetos y cambie las propiedades de los objetos al ejecutar. La primavera se inyecta a través de la reflexión.
La clave para comprender DI es: "¿Quién depende de quién, por qué necesita depender de ello, quién inyecta quién y qué lo inyecta"? Analicémoslo en profundidad:
● ¿Quién depende de quién: por supuesto, la aplicación depende del contenedor del COI;
● Por qué se necesitan dependencias: las aplicaciones necesitan contenedores de COI para proporcionar recursos externos requeridos por los objetos;
● ¿Quién inyecta quién: es obvio que el contenedor IOC inyecta un objeto de la aplicación, un objeto en el que depende la aplicación;
● Lo que se inyecta: es inyectar recursos externos (incluidos objetos, recursos y datos constantes) requeridos para un objeto.
¿Cuál es la relación entre COI y DI? De hecho, se describen desde diferentes ángulos desde el mismo concepto. Dado que el concepto de inversión de control es relativamente vago (tal vez se entiende como el nivel de objetos de control de contenedores, es difícil pensar en quién mantendrá las relaciones de objetos), en 2004, el Maestro Martin Fowler dio un nuevo nombre: "Inyección de dependencia". En comparación con el COI, la "inyección de dependencia" describe claramente ", el objeto inyectado depende del objeto de dependencia de la configuración del contenedor del COI".
Resumir
De hecho, todos tienen su propia comprensión del concepto de COI de primavera, y no hay una respuesta estándar. La dirección general es perfecta.
Lo anterior se trata de comprender la inyección de dependencia y la inversión de control en la primavera. Espero que sea útil para todos. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!