Blast: Framework web de desarrollo rápido para Java

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

Etiquetas: java framework web IOC AOP anotaciones

Publicado el 6-1 07:48