Lo que me gustaría lograr es la capacidad de "dinámicamente" (es decir, basada en una propiedad definida en un archivo de configuración) activar/desactivar la importación de un contexto Spring XML infantil.¿Cómo se logra la importación de recursos condicional en un contexto XML de Spring?
me imagino algo como:
<import condition="some.property.name" resource="some-context.xml"/>
Cuando se resuelve la propiedad (a un valor lógico) y cuando el contexto cierto es importado, de lo contrario, no lo es.
Algunos de mis investigaciones hasta el momento:
Escribir una costumbre NamespaceHandler (y clases relacionadas) así que puedo registrar mi propio elemento personalizado en mi propio espacio de nombres. Por ejemplo:
<myns:import condition="some.property.name" resource="some-context.xml"/>
El problema con este enfoque es que no quiero replicar toda la lógica de importación de recursos de Spring y no es obvio para qué debo delegar para hacerlo.
- Anulando
DefaultBeanDefinitionDocumentReader
para extender el comportamiento del análisis e interpretación del elemento "importación" (que ocurre allí en el métodoimportBeanDefinitionResource
). Sin embargo, no estoy seguro de dónde puedo registrar esta extensión.
En lugar de realizar una importación condicional, ¿por qué no utilizar el escaneo de ruta de clase y desplegar solo la configuración requerida? Encuentro que la importación condicional es más compleja y es más difícil averiguar qué es/no está configurado cuando se mira una aplicación desplegada. – SteveD
¿Cómo se define la "configuración requerida"? Tenemos partes de la funcionalidad que están muy bien modularizadas y se activan automáticamente cuando se carga el contexto (patrón de la pizarra). Pero necesitamos un mecanismo para dinámicamente (leer: en el momento de la instalación/configuración) activar y desactivar estas piezas de funcionalidad. Es un tipo de sistema de complemento ligero. –