2010-07-06 16 views
31

Tengo varios archivos de contexto. El requisito es: un Bean particular (que realiza algunos cambios de configuración) para ser inicializado primero entre el resto de los beans.Orden de Inicialización de Spring Bean

¿Hay alguna manera de obtener este frijol cargado primero?

Una opción es usar el atributo depends-on`. Pero eso requeriría actualizar todo el resto de los granos, por lo que parece no ser la mejor solución.

¿Tenemos mejores opciones?

Respuesta

14

mi humilde opinión usted debe esperar hasta que arreglen https://jira.spring.io/browse/SPR-3948

Una forma probable es utilizar depende en-atributo. Pero, de nuevo, no quiero agregar este atributo en el resto de los frijoles (este es probablemente el último recurso para mí).

En realidad, no es necesario utilizar dependencias en CADA Y CADA BEAN en cada una de las aplicacionesContext.xml.

Use <import /> en todos los applicationContext.xml "lower-lvel" para importar el top applicationContext.xml.

Y use el atributo depends-on en cada definición de bean solo en la parte superior applicationContext.xml, excepto en el <bean /> que desea cargar primero.

+0

¿te refieres al atributo depende de la etiqueta de importación? –

+0

Me refiero a usar en appContext.xml de nivel inferior para importar appContext.xml de nivel superior. Y use el atributo dependiente para solo en el appContext.xml de nivel superior – dira

+0

init-order no sería tan malo como dependen-on. ¿Alguien puede verificar si los números negativos son aceptables para el orden de inicio? Y si el valor predeterminado es 1 o 0? –

-3

No soy un experto en Spring y es probable que alguien que lo critique me grite. Pero hasta entonces ...

Donde haya lugar a la ambigüedad, supongo que Spring carga/aplica cosas en el orden en que las encuentra en los archivos de configuración. Por lo tanto, como una primera y más simple aproximación, trataré de asegurarme de que lo que desea inicializar primero sea una de las primeras cosas en sus archivos de configuración.

Si todo es jerárquico, querrá que sus "primeras" configuraciones estén en el archivo "principal" antes de invocar las otras o, si es posible, en el primer archivo invocado.

+4

Spring ciertos tipos de granos (como BeanPostProcessor) antes que los demás y que también resuelve árboles de dependencias. Creo que no sirve de nada intentar "ordenar" declaraciones de alguna manera; simplemente no funcionará o se interrumpirá inmediatamente después de cualquier cambio en sus beans. –

1

En puede ser significativa para requerir ordenamiento de los granos, por lo general para los granos de técnicos (por ejemplo, la adición de MBeans) para ser cargado antes de habas de negocio (como se propone en http://jira.springframework.org/browse/SPR-3948)

Usando BeanPostProcessor es otra manera de proporcionar una cierta ordenando en sus frijoles Compruebe AbstractApplicationContext.refresh() para ver cómo se aplica.

Cuestiones relacionadas