Integramos las mejores prácticas en Java

Descubre cómo migramos de C++ a Java un módulo de análisis estático, rediseñamos la arquitectura con Guice DI y añadimos soporte para anotaciones de usuario.

17 sept 2025 • 5 min de lectura • Equip Q2BSTUDIO

Inteligencia-Artificial-

Esta es la historia de cómo reescribimos un módulo de análisis estático en Java, migramos código nativo en C++ a Java puro, adoptamos inyección de dependencias y añadimos soporte para anotaciones de usuario sin que el sistema se viniera abajo en el intento. Hace varios años el proyecto Java del analizador quedó anclado en Java 8 y con el tiempo acumuló malas prácticas: abundantes métodos estaticos, estados globales, muchos singletons y estilos de codigo mezclados. El primer paso fue ordenar el estilo usando Google Java Style con ajustes razonables y aplicar formateo automatico, pero la parte realmente compleja fue rediseñar la arquitectura.

La necesidad llegó al desarrollar un modulo de taint que requería un mecanismo de anotaciones avanzado. Las anotaciones que usamos son marcas para el analisis estatica, similares a NotNull y Nullable, pero con mayor expresividad para declarar fuentes y sumideros de datos contaminados, condiciones de precondicion y transformaciones sobre los valores. Antes, parte importante de ese mecanismo residia en codigo nativo C++ compartido. Depurar esa parte implicaba cambiar entre depuradores de Java y C++ y disminuia la velocidad del desarrollo, asi que decidimos reescribirlo completamente en Java y apoyarnos en un contenedor DI para gestionar dependencias de forma limpia.

Escogimos Guice como framework DI por ser ligero y centrado en inyeccion sin traer la pesada maquinaria de Spring, que no era necesaria para una aplicacion de linea de comandos. Dagger tambien es una alternativa valida, pero necesitabamos resolver dependencias en tiempo de ejecucion mediante reflexion, algo que Guice maneja de forma natural. Con Guice definimos modulos extendiendo AbstractModule, usamos bind para declarar dependencias y empleamos Multibinder para construir colecciones inmutables de proveedores de anotaciones. De ese modo cada proveedor se registra en tiempo de inicializacion y el conjunto resultante alimenta el procesador de anotaciones sin introducir estado global mutable.

Arquitecturalmente dividimos responsabilidades en componentes claros: proveedores de anotaciones que conocen que elementos marcar y como, procesadores que recorren el modelo del codigo y aplican las anotaciones, y un servicio de interaccion que expone el modelo final anotado. El soporte de anotaciones de usuario se implemento como un modulo separado encargado unicamente de parsear JSON, validar y convertirlo en objetos internos. Ese modulo actua como plugin: puede cargar anotaciones desde archivos locales o desde la red sin que el nucleo del analizador necesite conocer esos detalles.

Adicionalmente desarrollamos una DSL interna para describir anotaciones de forma fluida en Java, permitiendo por ejemplo declarar que todas las llamadas a ciertos metodos de java.sql.Statement son posibles sumideros de inyeccion SQL. Para evitar crear objetos invalidos en la cadena fluida utilizamos patrones que recuerdan al Curiously Recurring Template Pattern y garantizan operaciones coherentes en el encadenamiento.

La clave al integrar todo fue Multibinder: en el modulo principal creamos un Set inyectable de procesadores y cada plugin aporta su procesador mediante ProvidesIntoSet. Esto permite que nuevos proveedores se añadan simplemente incorporando un modulo nuevo al inyector, manteniendo la lista de procesadores inmutable una vez configurada la aplicacion. Asi, si en el futuro necesitamos cargar anotaciones desde un servicio web o un repositorio, basta con introducir un NetworkAnnotationModule y todo funciona sin tocar el nucleo.

El segundo acto fue refactorizar la aplicacion principal, que originalmente no estaba diseñada para DI. Tuvimos que mapear las dependencias, romper cadenas largas y sustituir singletons por proveedores gestionados por Guice. Muchas clases que hacian descubrimiento dinamico pasaron a ser metodos @Provides o proveedores en modulos, simplificando la inicializacion y facilitando pruebas unitarias. Tambien separamos el manejo de errores y la generacion de advertencias: el modulo de anotaciones detecta problemas de parseo pero es el modulo principal quien decide como transformar esos problemas en advertencias del analizador, lo que permite reemplazar la estrategia de reporte sin modificar la logica de procesamiento.

El resultado fue un nucleo mucho mas modular, facil de extender y de mantener. La decision de invertir tiempo en un buen diseno pago al reducir la complejidad de futuras ampliaciones y evitar que cada nueva caracteristica se convirtiera en una fuente de errores inesperados. El nuevo modulo escrito en Java elimina la friccion del codigo nativo y la DI nos da control y previsibilidad sobre la construccion del grafo de dependencias.

En Q2BSTUDIO aplicamos principios similares en nuestros proyectos de desarrollo de aplicaciones a medida y software a medida, donde la calidad arquitectonica y la escalabilidad son columnas fundamentales. Como empresa de desarrollo de software especializada en aplicaciones a medida, inteligencia artificial, ciberseguridad y servicios cloud aws y azure asesoramos a clientes para adoptar patrones de DI, modularizacion y despliegue en la nube que facilitan evolucionar soluciones con agentes IA y capacidades de inteligencia de negocio. Si buscas desarrollar una aplicacion empresarial robusta, considera nuestros servicios de desarrollo multiplataforma en aplicaciones a medida y nuestras soluciones de inteligencia artificial para empresas.

Ademas ofrecemos servicios de ciberseguridad y pentesting para proteger tu software, consultoria en servicios inteligencia de negocio y adopcion de herramientas como power bi, disposicion de servicios cloud aws y azure y automatizacion de procesos mediante integracion con agentes IA. Al aplicar buenas practicas como inyeccion de dependencias, pruebas unitarias y modulos desacoplados garantizamos que tu proyecto sea facil de mantener y seguro frente a nuevas necesidades.

En resumen, reescribir el modulo de anotaciones y adoptar Guice nos permitio mejorar la mantenibilidad, reducir el coste de futuras ampliaciones y preparar la plataforma para soportar anotaciones de usuario y analisis de taint de forma flexible. Esa experiencia la aplicamos en Q2BSTUDIO para construir soluciones a medida que combinan calidad arquitectonica, inteligencia artificial y seguridad, enfocadas en resultados reales para empresas.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Intel·ligència artificial

Agents d'IA, chatbots i assistents intel·ligents que automatitzen tasques i atenen els teus clients 24/7 per millorar l'eficiència del teu negoci.

Més info

Desenvolupament de programari

Aplicacions web, mòbils i d'escriptori, intranets, e-commerce, SaaS i plataformes de gestió dissenyades per a les necessitats concretes de la teva empresa.

Més info

Serveis cloud

Migració, infraestructura, hosting gestionat, alta disponibilitat i seguretat en Microsoft Azure i Amazon Web Services perquè el teu negoci escali sense límits.

Més info

Ciberseguretat i pentesting

Auditories de seguretat, test d'intrusió (pentesting) i protecció d'aplicacions, dades i infraestructura on-premise i cloud, amb hacking ètic i compliment normatiu.

Més info

Business Intelligence

Quadres de comandament i anàlisi de dades amb Power BI: integrem les teves fonts, dissenyem dashboards i KPIs i convertim les teves dades en decisions.

Més info

Automatització de processos

Automatitzem tasques repetitives i connectem les teves aplicacions amb n8n, Power Automate, Make i RPA, eliminant treball manual i augmentant la productivitat.

Més info

Formació per a empreses

Formem els teus equips en tecnologia amb criteri: desenvolupament web, bases de dades, Git, bones pràctiques i seguretat, automatització amb n8n, intel·ligència artificial per a empreses i creació de solucions d'IA amb Azure AI Foundry.

Més info

Auditoria de codi

Auditem el codi que creguis tu, el teu equip o una IA: et diem què està bé i què millorar, el securitzem i el deixem llest per a producció, web o app.

Més info

Generació d'imatges amb IA

Creem per tu les imatges que necessita el teu negoci amb intel·ligència artificial: producte, xarxes, publicitat, il·lustració i avatars. Tu ens dius què vols i t'ho lliurem llest per fer servir.

Més info

Generació de vídeos amb IA

Creem per tu vídeos amb intel·ligència artificial: promocionals, per a xarxes, presentadors virtuals, doblatge i animacions. Ens comptes la idea i t'ho lliurem muntat i llest per publicar.

Més info

Avatars conversacionals amb IA

Creem avatars conversacionals amb IA —humans digitals amb cara i veu— que atenen els teus clients i equips amb el coneixement de la teva empresa, a la teva web, monitors interactius, WhatsApp o Teams.

Més info

Màrqueting Online i IA

Google Ads, Meta Ads, LinkedIn Ads i posicionament en motors d'IA (GEO/AEO): captem clients i fem que la teva marca aparegui on et busquen, també a ChatGPT, Gemini i Perplexity.

Més info

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.

Live Chat