Blast: Framework web de alto rendimiento en Java
Blast es un framweork web basado en Java, optimizado para el desarrollo veloz, con una huella mínima de código y una curva de aprendizaje accesible. Su diseño se inspira en principios de frameworks como Spring, permitiendo a los desarrrolladores combinar la solidez de Java con la eficiencia de lenguajes dinámicos para aceelrar los proyectos web.
Características principales
- Inyección de dependencias (IOC)
- Programación orientada a aspectos (AOP)
- Soporte para anotaciones
Ejemplos de uso
Inicialización del contenedor de Blast
Inicio mediante código Java:
ContenedorAplicacion.arrancar("com.ejemplo.miproyecto");
MiServicio servicio = (MiServicio) ContenedorAplicacion.obtenerBean("miServicio");
Inicio mediante configuración web (web.xml):
<context-param>
<param-name>ubicacionConfiguracion</param-name>
<param-value>blast.config</param-value>
</context-param>
<listener>
<listener-class>org.blast.web.core.CargadorContextoListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.blast.web.servlet.ServletDispatcher</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
El parámetro context-param y el listener inicializan el contenedor de Blast, habilitando la gestión de beans y AOP. El servlet ServletDispatcher soporta las funcionalidades web.
Archivo de configuración blast.config:
paquete_base=com.ejemplo.miproyecto,org.servicios
prefijo_vistas=/WEB-INF/vistas/
sufijo_vistas=.html
paquete_base define los paquetes a escanear, separados por comas. prefijo_vistas y sufijo_vistas configuran la ruta y extensión de las vistas.
Controladores
@RutaSolicitud(path="/api")
@Componente(nombre="controladorPrincipal")
public class ControladorPrincipal {
@ResponseBody
@RutaSolicitud(path="/datos")
public Respuesta obtenerDatos(Parametros parametros, String clave, Integer valor) {
System.out.println("Procesando solicitud...");
System.out.println("Clave=" + clave);
System.out.println("Valor=" + valor);
System.out.println(parametros);
return new Respuesta(parametros);
}
@RutaSolicitud(path="/vista")
public String mostrarVista() {
return "pagina_principal";
}
}
@RutaSolicitud(path="/api") asigna la ruta de solicitud. @Componente(nombre="controladorPrincipal") indica que la clase es un bean gestionado por Blast, similar a anotaciones en Spring. @ResponseBody convierte la respuesta a JSON automáticamente. Los parámetros de los métodos se asignan automáticamente desde las solicitudes entrantes.
Implementación de AOP
@Aspecto
@PuntoCorte(ruta="com.ejemplo..*Servicio#metodoX, com.ejemplo..*Gestor#procesar*")
public class ConfiguracionAspecto extends InterceptorBase {
@Override
public void antesDeEjecutar(Object objetivo, Method metodo, Object[] argumentos) throws Throwable {
System.out.println("Iniciando interceptor...");
System.out.println(objetivo.getClass().getName() + "." + metodo.getName());
}
@Override
public void despuesDeRetornar(Object objetivo, Method metodo, Object[] argumentos, Object resultado) throws Throwable {
System.out.println("Finalizando interceptor...");
System.out.println(objetivo.getClass().getName() + "." + metodo.getName());
}
}
Esta clase configura aspectos, extendiendo InterceptorBase y sobrescribiendo los métodos antesDeEjecutar y despuesDeRetornar según sea necesario. Blast permite múltiples capas de proxy en una misma clase.
@Aspecto marca la clase como configuración de AOP. @PuntoCorte(ruta="...") define los puntos de corte con expresiones que soportan coincidencias flexibles.
Reglas de coincidencia: Paquete#Clase#Método[,]
Donde:
- .. representa cualquier número de niveles de paquete
- * indica coincidencia parcial - separa múltiples rutas