Lección 18: Interceptores y dependencias de módulos

Hooks de ciclo de vida de ColdBox acotados con @scope, y dependencias de módulos de BoxLang bajo modules/.

En esta página

Interceptores y dependencias de módulos

Dos convenciones más pequeñas e independientes completan el cuadro: hooks de ciclo de vida dentro de la aplicación ColdBox generada, y las dependencias de módulos de BoxLang que tu agente necesita en tiempo de ejecución.

interceptors/ - hooks de ciclo de vida de ColdBox

Los archivos interceptors/*.bx son interceptores de ColdBox (preProcess, postProcess y otros puntos de enganche del ciclo de vida), acotados mediante una anotación @scope en la propia clase:

// interceptors/AuditLogger.bx
/**
 * @scope agent
 */
class {

	function preProcess( event, interceptData ) {
		// ...
	}

}
ÁmbitoEfecto
agent (por defecto)Se copia en la carpeta interceptors/ de la aplicación generada - afecta solo a esta aplicación.
runtimeSe registra contra todo el runtime de BoxLang, no solo contra esta aplicación.

Un interceptor sin ningún @scope toma por defecto agent - la opción más estrecha y segura, ya que el ámbito runtime tiene efectos más allá de una sola aplicación. Un valor de @scope que no sea agent ni runtime hace fallar el build con un error claro.

Ya has visto un interceptor generado sin haber escrito ninguno tú - GatewaySessionBootstrap.bx de la Lección 14 y WebUiSchema.bx de la Lección 15 funcionan exactamente así, solo que escritos por BxAgents en vez de por ti.

modules/ - dependencias de módulos de BoxLang

modules/ contiene las dependencias de módulos de BoxLang que tu agente necesita - una subcarpeta inmediata por módulo, descubierta por nombre de carpeta (no recursivo):

modules/
└── my-extra-module/
    ├── module.json
    └── ...

Una carpeta de módulo puede incluir un module.json con un array dependsOn que nombre otras entradas de modules/* por nombre de carpeta:

{
	"dependsOn": [ "some-other-module" ]
}

Esta es la convención propia de BxAgents para declarar dependencias a efectos de validación - es independiente del mecanismo de carga de módulos del propio BoxLang. Las dependencias circulares se rechazan igual que los ciclos de subagentes (consulta la Lección 11): se informa del camino completo del ciclo y no se genera código hasta que el grafo sea acíclico. Un module.json es totalmente opcional - de una carpeta de módulo que no lo tenga se asume que no declara dependencias.

Pruébalo

Añade un interceptors/RequestLogger.bx con una anotación explícita @scope agent que registre cada petición entrante mediante writeLog(), reconstruye, y comprueba .build/app/interceptors/ para ver la copia, más su registro en .build/app/config/ColdBox.bx.

Referencia completa: interceptors/, modules/.

Siguiente: Lección 19 - Probar tu agente

Editar esta página Descargar Markdown Última actualización Sep 17, 2026, 5:15:06 PM
Lesson 18 of 20 - Introduction to BxAgents