Inversión de control de IoC en Spring-2-Spring

Tabla de contenido

1. DI basada en XML

1.1 Clasificación de inyección: inyección de método setter + inyección de constructor

1.2 Clasificación de inyección: inyección del método de incubadora (maestra)

1.2.1 Inyección de método de establecedor de tipo simple

1.2.2 Inyección de tipos de referencia por método de Setter

1.3 Clasificación de inyección: método de construcción inyección (comprensión)

1.3.1 Ejemplo 1: Inyección de un método de construcción parametrizado de un objeto Java ordinario

1.3.2 Ejemplo 2: inyección de constructor parametrizado del objeto java.io.File

1.4 Inyección automática de atributos de tipo de referencia

1.4.1 Atributos del tipo de referencia: inyección automática por nombre

1.4.2 Atributos del tipo de referencia: inyección automática por tipo

1.5 Especificar varios archivos de configuración de Spring para la aplicación

1.5.1 Estructura del código

1.5.2 Utilice etiquetas para importar otros archivos de subconfiguración en el archivo de configuración general de Spring-1

1.5.2 Utilice etiquetas para importar otros archivos de subconfiguración en el archivo de configuración general de Spring-2

1.5.3 Prueba

2. Resumen de primavera, ver el final del blog.

3. DI basada en anotaciones

3.0 demostración del archivo de configuración spring.xml

3.1 Cuando hay varios paquetes en el proyecto, tres formas de especificar varios paquetes de escaneo

3.1.1 Método 1: Utilice varias rutas de paquetes diferentes especificadas

3.1.2 Método 2: use un separador para especificar el valor del paquete base

3.1.3 Método 3: el paquete base se asigna al nombre del paquete principal

3.2 Definir la anotación @Component de java Bean (Master)  

3.2.1 Al mismo tiempo, es necesario configurar el escáner de componentes en el archivo spring.xml. El escáner de componentes escaneará las clases anotadas y creará objetos al mismo tiempo.

3.2.2 Notas de prueba

3.3 Spring también proporciona otras 3 anotaciones para crear objetos: @ Repository / @ Service / @ Controller / @ Component

3.4 Inyección de atributo de tipo simple @Value (maestro)

3.5 Inyección de atributo de tipo de referencia-1: @Autowired es inyectado automáticamente por byType (maestro)

3.6 Inyección de atributo de tipo de referencia-2: La combinación de @Autowired y @Qualifier es inyectada automáticamente por byName (maestro)

3.7 Anotación JDK @ Inyección automática de recursos (maestro)

3.7.1 byType inyecta atributos de tipo de referencia

3.8 Comparación del uso de anotaciones para crear automáticamente javaBean y configurar javaBean en archivos XML

3.8.1 La forma de crear javaBean automáticamente usando anotaciones: use la forma xml donde las propiedades del objeto bean no se cambian a menudo

3.8.2 La forma de crear automáticamente javaBean usando XML: los atributos de los objetos bean a menudo se cambian usando XML

4. Resumen de primavera-COI

1. DI basada en XML

1.1 Clasificación de inyección: inyección de método setter + inyección de constructor

(1) Para la instancia de bean, el contenedor Spring primero crea el objeto llamando al constructor sin parámetros y luego inicializa las propiedades del objeto bean.

(2) La inicialización se realiza automáticamente mediante el contenedor Spring, que se denomina inyección .

(3) De acuerdo con los diferentes métodos de inyección, hay dos tipos de uso común: inyección de método de incubadora e inyección de método de construcción .

1.2 Clasificación de inyección: inyección del método de incubadora (maestra)

La inyección del método establecido también se llama inyección de valor establecido, que se refiere a pasar la instancia del llamado a través del método establecedor. Este método de inyección es simple e intuitivo, por lo que se usa ampliamente en la inyección de dependencia de Spring.

1.2.1 Inyección de método de establecedor de tipo simple

  

1.2.2 Inyección de tipos de referencia por método de Setter

Cuando el valor de atributo de un bean especificado es una instancia de otro bean, la relación de referencia entre ellos se especifica mediante ref, y el valor de ref debe ser el valor de id de un determinado bean.

Nota: Para referencias a otros objetos Bean, use el atributo ref de la etiqueta <bean />.

1.3 Clasificación de inyección: método de construcción inyección (comprensión)

La inyección del constructor significa que el contenedor Spring completa la instanciación del destinatario mientras se construye la instancia del llamador. Es decir: use el constructor parametrizado del objeto java para establecer la dependencia.

1.3.1 Ejemplo 1: Inyección de un método de construcción parametrizado de un objeto Java ordinario

Los atributos utilizados para especificar parámetros en la etiqueta <constructor-arg /> son:

(1) nombre: especifique el nombre del parámetro.

(2) índice: especifique qué parámetro corresponde al constructor, comenzando desde 0. Sin embargo, este atributo no es necesario, pero debe tenerse en cuenta que si los tipos de parámetros son los mismos o si existe una relación de contención entre ellos, debe asegurarse de que el orden de asignación sea coherente con el orden de los parámetros en el constructor.

1.3.2 Ejemplo 2: inyección de constructor parametrizado del objeto java.io.File

Utilice la inyección de construcción para crear un objeto de archivo de clase de sistema.

1.4 Inyección automática de atributos de tipo de referencia

(1) Para la inyección de atributos de tipo de referencia, o la inyección que no se muestra en el archivo de configuración, puede establecer el valor del atributo autowire para la etiqueta <bean /> para inyectar automáticamente los atributos del tipo de referencia (el valor predeterminado es no inyectar automáticamente el tipo de referencia Atributos).

(2) Según los diferentes criterios de juicio de la inyección automática, se puede dividir en dos tipos: autowire =  byName: Inyección automática según el nombre del frijol. autowire =  byType: Inyección automática según el tipo de bean.

1.4.1 Atributos del tipo de referencia: inyección automática por nombre

Cuando el valor de id del callee bean en el archivo de configuración es el mismo que el nombre de atributo del tipo de referencia de la clase del caller bean en el código, el método byName se puede utilizar para permitir que el contenedor inyecte automáticamente el callee bean en el caller bean.

El contenedor implementa la inyección automática comparando el nombre de atributo de la clase de bean del llamador con el id del bean llamado en el archivo de configuración.

1.4.2 Atributos del tipo de referencia: inyección automática por tipo

Usar inyector automático en modo byType, requiere: el archivo de configuración es una clase de clase de bean de llamada especificada para invocar el código de clase de un bean y un tipo de atributo de tipo de referencia homólogo : es decir, o el mismo, o hay una relación ( Subclase o clase de implementación).

Nota: Sin embargo, solo puede haber uno llamado bean del mismo origen, si hay más de uno, el contenedor no sabrá cuál debe coincidir.

1.5 Especificar varios archivos de configuración de Spring para la aplicación

En las aplicaciones prácticas, con el aumento de la escala de la aplicación, el número de Beans en el sistema también ha aumentado enormemente, lo que hace que el archivo de configuración se vuelva muy grande e hinchado. Para evitar esta situación y mejorar la legibilidad y el mantenimiento del archivo de configuración, el archivo de configuración de Spring se puede descomponer en varios archivos de configuración. Archivo de configuración de la relación de contención: hay un archivo maestro entre varios archivos de configuración y el archivo de configuración maestro introduce otros subarchivos a través de <import />.

En el código Java, solo necesita usar el archivo de configuración general para inicializar el contenedor Spring.


Por ejemplo:

1.5.1 Estructura del código

1.5.2 Utilice la etiqueta <import /> para importar otros archivos de subconfiguración en el archivo de configuración general de Spring-1

1.5.2 Utilice la etiqueta <import /> para importar otros archivos de subconfiguración en el archivo de configuración general Spring-2

Nota: El carácter comodín * también se puede utilizar para identificar cualquier carácter que coincida . Sin embargo, en este momento, se requiere que el nombre del archivo de configuración principal no pueda cumplir con el formato que * puede coincidir; de lo contrario, se producirá una inclusión cíclica recursiva.

En este caso, el archivo de configuración principal no puede coincidir con el formato de spring - *. Xml, es decir, no se puede llamar spring-total.xml.

1.5.3 Prueba

2. Resumen de primavera, ver el final del blog.

3. DI basada en anotaciones

Para DI usando anotaciones, ya no es necesario declarar instancias de bean en el archivo de configuración de Spring. El uso de anotaciones en Spring requiere algunos cambios basados ​​en el entorno de ejecución original de Spring.

El escáner de componentes <context: component-scan base-package = "" /> debe configurarse en el archivo de configuración de Spring para escanear las anotaciones en el paquete base especificado.

3.0 demostración del archivo de configuración spring.xml

3.1 Cuando hay varios paquetes en el proyecto, tres formas de especificar varios paquetes de escaneo

3.1.1 Método 1: use varios <context: component-scan base-package = "" /> para especificar diferentes rutas de paquetes

3.1.2 Método 2: use un separador para especificar el valor del paquete base

El delimitador puede usar coma (,), punto y coma (;) y espacios, pero no se recomiendan los espacios.

3.1.3 Método 3: el paquete base se asigna al nombre del paquete principal

La tabla de valores de paquete-base es el paquete básico. El inicio del contenedor escaneará las anotaciones en el paquete y sus subpaquetes y, por supuesto, se escanearán los subpaquetes debajo del subpaquete. Entonces, el paquete base puede especificar un paquete principal.

Sin embargo, no se recomienda utilizar el paquete principal de nivel superior, ya que existen muchas rutas de exploración que ralentizarán el tiempo de inicio del contenedor. Especifique el paquete de destino y apropiado, es decir, la ruta completa del paquete donde se encuentra la anotación. Por ejemplo, la clase anotada está en el paquete com.bjpowernode.beans.

3.2 Definir la anotación @Component de java Bean (Master)  

Debe usar la anotación @Component en la clase, y el atributo de valor de la anotación se usa para especificar el valor de identificación del bean.

3.2.1 Al mismo tiempo, es necesario configurar el escáner de componentes en el archivo spring.xml. El escáner de componentes escaneará las clases anotadas y creará objetos al mismo tiempo.

   

3.2.2 Notas de prueba

3.3 Spring también proporciona otras 3 anotaciones para crear objetos:  @ Repository / @ Service / @ Controller / @ Component

Además, Spring también proporciona 3 anotaciones para crear objetos:

(1) @Repository: se utiliza para anotar las clases de implementación de DAO.

(2) @Service: se utiliza para anotar la clase de implementación del servicio.

(3) @Controller: se usa para anotar la clase de implementación del controlador.

Estas tres anotaciones y @Component pueden crear objetos, pero estas tres anotaciones tienen otros significados:

@Service crea objetos de capa empresarial, los objetos de capa empresarial pueden agregar funciones de transacción y los objetos creados por la anotación @Controller se pueden usar como procesadores para recibir solicitudes de usuarios.

@Repository, @Service y @Controller son el refinamiento de las anotaciones de @Component, que marcan objetos de diferentes capas, a saber, objetos de capa de persistencia, objetos de capa empresarial y objetos de capa de control.

@Component no especifica el atributo de valor, el id del bean es la minúscula de la primera letra del nombre de la clase.

3.4 Inyección de atributo de tipo simple @Value (maestro)

Debe usar la anotación @Value en el atributo, y el atributo de valor de la anotación se usa para especificar el valor que se anotará. Cuando se usa esta anotación para completar la inyección de propiedad, no se requiere ningún definidor en la clase. Por supuesto, si la propiedad tiene un setter, también se puede agregar al setter.

Por ejemplo:

3.5 Inyección de atributo de tipo de referencia-1: @Autowired es inyectado automáticamente por byType (maestro)

Debe usar la anotación @Autowired en el atributo referenciado, y la anotación usa el ensamblaje automático de Bean por tipo de forma predeterminada  . Cuando se usa esta anotación para completar la inyección de propiedades, no se requiere ningún definidor en la clase. Por supuesto, si la propiedad tiene un setter, también se puede agregar al setter.

Por ejemplo:

3.6 Inyección de atributo de tipo de referencia-2: La combinación de @Autowired y @Qualifier es inyectada automáticamente por byName (maestro)

Las anotaciones @Autowired y @Qualifier deben combinarse en el atributo de referencia. El atributo de valor de @Qualifier se utiliza para especificar el valor de id del bean que se va a comparar. No hay necesidad de un método set en la clase, también se puede agregar al método set.

Por ejemplo:

@Autowired también tiene un atributo requerido, el valor predeterminado es verdadero, lo que significa que cuando la coincidencia falla, el programa terminará. Si el valor se establece en falso, la coincidencia falla y se ignorará, y el valor del atributo no coincidente es nulo.

3.7 Anotación JDK @ Inyección automática de recursos (maestro)

Spring proporciona soporte para la anotación @Resource en jdk. Anotación @Resource puede coincidir con frijol por su nombre Byname , o que coincida con la haba por tipo byType ,

El valor predeterminado es a inyectar por nombre Byname. Beans no se pueden inyectar por su nombre . Inyección a juego de la haba se llevará a cabo en la forma de tipo byType .

Para utilizar esta anotación, el JDK debe ser de la versión 6 o superior. @Resource puede estar en atributos o establecer métodos.

3.7.1 byType inyecta atributos de tipo de referencia

Si la anotación @Resource no toma ningún parámetro, se inyectará por nombre por nombre por defecto de forma predeterminada, y los beans no se pueden inyectar por nombre, y la inyección correspondiente de beans se realizará de la manera del tipo por tipo.

Por ejemplo:

3.8 Comparación del uso de anotaciones para crear automáticamente javaBean y configurar javaBean en archivos XML

3.8.1 La forma de crear javaBean automáticamente usando anotaciones: use la forma xml donde las propiedades del objeto bean no se cambian a menudo

Las ventajas son: conveniente, intuitivo, eficiente (menos código, no tan complicado como escribir archivos de configuración).

Desventajas: Está escrito en el código Java de una manera codificada, lo cual es intrusivo en el código. Las modificaciones requieren la recompilación del código.

3.8.2 La forma de crear automáticamente javaBean usando XML: los atributos de los objetos bean a menudo se cambian usando XML

La ventaja es: la configuración y el código están separados; para hacer cambios en xml, no es necesario compilar el código, simplemente reinicie el servidor para cargar la nueva configuración.

Las desventajas son: escritura problemática, baja eficiencia y demasiado complicada para proyectos grandes.

4. Resumen de primavera-COI

 

 

 

Supongo que te gusta

Origin blog.csdn.net/cmm0401/article/details/112257139
Recomendado
Clasificación