En el contenedor de primavera, además de establecer dependencias a través de <REF>, hay algunas relaciones especiales entre los dos frijoles.
1 herencia
En el principio de programación orientado a objetos, cuando múltiples clases tienen los mismos métodos y propiedades, se puede introducir la clase principal para eliminar el código duplicado. En el contenedor de primavera, si múltiples frijoles tienen la misma información de configuración, podemos definir un frijol principal, de modo que el frijol infantil herede automáticamente la información de configuración del frijol principal.
<
En términos generales, la función del frijol principal es simplificar la configuración del frijol infantil, por lo que se establece en una clase abstracta (abstract = "true"); Si el frijol principal no está configurado en una clase abstracta aquí, el contenedor de primavera instanciará el frijol principal.
2 Pre-dependencia
En términos generales, < -ref> se usa para establecer dependencias entre frijoles. Los contenedores de primavera son responsables de administrar estas relaciones. Al instancias de un frijol, el contenedor asegura que todos los frijoles dependan del bean hayan completado el trabajo de inicialización.
Pero en algunos casos, las dependencias entre frijoles no son tan obvias.
Supongamos que en este escenario, un sistema establece algunos parámetros del sistema (como el período de validez de contraseña, si habilita el monitoreo, etc.), y estos parámetros de inicio se utilizan para controlar la lógica operativa del sistema. Utilizamos una clase de configuración para representar estos parámetros:
Configuración de clase pública { / ** * Tiempo de vencimiento de contraseña (unidad: días) * / public static int pass_timeout = 30; / *** si habilita el monitoreo*/ public static boolean is_monitor = false;}Aquí establecemos valores predeterminados para estos parámetros. El sistema también tiene un backend administrativo, a través del cual los administradores pueden ajustar estos parámetros del sistema y guardarlos en la base de datos. Por lo tanto, cuando se inicia la aplicación, estos parámetros del sistema deben cargarse desde la base de datos:
Sistema de clase pública {System Public () {init (); } /*** Inicialización* /private void init () {// Suponga que estos valores provienen de la base de datos settings.pass_timeout = 20; Settings.is_monitor = true; }}El sistema tiene un Administrador de caducidad de contraseña, que creará una tarea cronometrada para detectar si la contraseña expira en función del [número de días en que expira la contraseña] en los parámetros del sistema:
Public Class PassManager {int TimeOut; public passManager () {timeOut = settings.pass_timeout; TimeTask (); } / *** Tarea cronometrada para detectar si la contraseña expira* / private void timerTask () {} public int getTeout () {return timeOut; }}Aunque PassManager no confía directamente en la configuración, lógicamente, PassManager espera que el sistema cargue parámetros inicializados del sistema antes de comenzar.
En la primavera, puede especificar explícitamente el frijol previo a la dependencia de un frijol a través de la propiedad depende para garantizar que el frijol previo a la dependencia de este bean se haya cargado antes de la instancia.
<bean id = "sistema"/> <bean id = "gerente" depende de = "sistema"/>
Si el prefijo depende de múltiples frijoles, el nombre del bean puede configurarse por comas, espacios o semicolones.
3 ID de cita
Supongamos que un frijol debe referirse al valor de identificación (nombre de beanname) de otro bean. Esto generalmente se usa para obtener otro bean a través del método GetBean (BeanName) en el frijol durante el tiempo de ejecución.
Se puede configurar así:
<bean id = "autor"/> <bean id = "book" p: autorid = "autor"/>
Atributo AuthorId agregado en el libro:
/** * Autor Bean ID */private String AuthorId;
Aunque se puede establecer en esta forma literal, no existe una relación de referencia real entre los dos. Por lo tanto, el error de configuración se encontrará solo cuando se llame a la llamada específica.
Spring proporciona la etiqueta de elemento <dref>, que hace referencia al nombre de otro bean a través de <dref>. De esta manera, cuando se inicia el contenedor, se verificará la exactitud de la relación de referencia y la información de configuración incorrecta se puede encontrar con anticipación.
<bean id = "autor10"/> <bean id = "book10"> <Property name = "autorid"> <idref bean = "autor10"/> </Property> </bean>
Si se produce un error de configuración, se lanzará un BeanDefinitionStoreException cuando se inicie el contenedor de resorte, y el analizador XML del IDE también encontrará errores de referencia por adelantado, por lo que se recomienda usar la etiqueta del elemento <dref> para hacer referencia a la ID.
Resumir
Lo anterior es la relación especial entre Spring Beans presentados por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje. ¡El editor le responderá a tiempo!