¿Qué hace Spring Bean Factory XML — Patrones de consulta Dasel v3?
<when_to_use>
Activa esta habilidad cuando consultes cualquier archivo XML de beans Spring — applicationContext.xml, *_beans.xml, spring-context.xml, o cualquier XML de ApplicationContext de Spring — para descubrimiento de beans, análisis de dependencias, cableado JMS, auditoría de inyección de propiedades o trazado de referencias entre beans.
</when_to_use>
Patrones de selector Dasel v3 para XML de fábrica de beans Spring. Siempre pasa -i xml explícitamente.
Regla de prefijo de atributos: El modo amigable de Dasel (por defecto) añade un prefijo - a los atributos XML. El atributo id es -id, class es -class. El contenido de texto es #text.
Descubrimiento de Beans
# Todos los IDs de beans
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(has("-id")).map("-id")'
# Todas las clases de beans
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(has("-class")).map("-class")'
# Mapear -class sobre cada bean (incluye beans sin -id)
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.map("-class")'
Coincidencia de Patrones de Clase
Filtra beans por nombre de clase mediante regex en -class.
# Beans cuya clase contiene JmsTemplate
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(-class ~ ".*JmsTemplate.*").map("-id")'
# Contar beans que coinciden con un patrón de clase
cat beans.xml | dasel -i xml 'len(beans.bean.filter(-class ~ ".*Jms.*"))'
Análisis de Cableado de Dependencias
Encuentra beans que referencian a otros beans mediante el atributo -ref en elementos hijo property.
Patrón: parentCollection.filter(childElement.filter(condition).len($this) > 0) — filtra el padre probando si existe un hijo coincidente (longitud > 0).
# Beans que referencian un ID de bean específico mediante el atributo ref
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(property.filter(-ref == "targetBeanId").len($this) > 0).map("-id")'
Mapeo de Destinos JMS
Encuentra qué beans consumen qué destinos JMS mediante elementos hijo property.
# Beans conectados a una propiedad de destino específica
cat integrationpoint_beans.xml | dasel -i xml 'beans.bean.filter(property.filter(-name == "destination").len($this) > 0).map("-id")'
Extracción de Inyección de Propiedades
Extrae valores de placeholder externalizados ${...} de las definiciones de beans.
# Todos los valores de propiedad que usan placeholders ${...}
cat storage_beans.xml | dasel -i xml 'beans.bean.property.filter(-value ~ ".*\\$\\{.*\\}.*").map("-value")'
Acceso a Atributos y Contenido de Texto
# <bean id="myBean" class="com.example.Foo">some text</bean>
cat beans.xml | dasel -i xml 'beans.bean[0].-id' # myBean
cat beans.xml | dasel -i xml 'beans.bean[0].-class' # com.example.Foo
cat beans.xml | dasel -i xml 'beans.bean[0].#text' # some text
# Descubrir todas las claves (atributos + elementos hijo) en el primer bean
cat beans.xml | dasel -i xml 'beans.bean[0].keys($this)'
Manejo de Namespaces
El modo amigable elimina los prefijos de namespace de los nombres de elementos — funciona para la mayoría de consultas Spring.
Cuando los prefijos de namespace causan fallos en los selectores (elemento no encontrado a pesar de existir), cambia al modo estructurado:
cat spring-context.xml | dasel -i xml --read-flag xml-mode=structured 'beans.bean[0]'
Análisis entre Archivos
Escribe resultados intermedios en /tmp/ — nunca en el árbol fuente.
# Extraer IDs de beans de múltiples archivos, comparar
cat chaosrouter_beans.xml | dasel -i xml 'beans.bean.filter(has("-id")).map("-id")' > /tmp/chaosrouter_beans.txt
cat integrationpoint_beans.xml | dasel -i xml 'beans.bean.filter(has("-id")).map("-id")' > /tmp/integration_beans.txt
diff /tmp/chaosrouter_beans.txt /tmp/integration_beans.txt