🧪 Enunciado: AOP con una Calculadora
Crea un pequeño proyecto en Java utilizando Spring con soporte para Aspectos (AOP). El objetivo es interceptar los métodos de una clase Calculadora antes y después de su ejecución para mostrar mensajes informativos.
🔧 Requisitos
-
Clase Calculadora:
- Debe ser un componente (
@Component) de Spring. - Implementa dos métodos:
public void sumar(int a, int b)→ imprime por consola el resultado de la suma.public void restar(int a, int b)→ imprime por consola el resultado de la resta.
- Debe ser un componente (
-
Clase Aspecto:
- Define un aspecto con
@Aspecty@Component. - Añade un método con la anotación
@Beforeque se ejecute antes de cualquier método de la claseCalculadora, mostrando el mensaje: "Mensaje antes de los cálculos". - Añade un método con la anotación
@Afterque se ejecute después de cualquier método de la claseCalculadora, mostrando el mensaje: "Mensaje después de los cálculos".
- Define un aspecto con
-
Clase Config:
- Usa
@Configuration,@ComponentScany@EnableAspectJAutoProxypara activar el escaneo de componentes y el soporte de AOP.
- Usa
-
Clase Principal:
- Usa
AnnotationConfigApplicationContextpara iniciar el contexto Spring manualmente. - Obtiene el bean
Calculadoray llama a los métodossumaryrestar.
- Usa
📄 Enunciado: AOP con Lectura de Archivos
Crea una aplicación de consola en Java utilizando Spring y AOP para interceptar el proceso de lectura de datos. El objetivo es mostrar mensajes antes y después de ejecutar el método que simula la lectura de un archivo.
🔧 Requisitos
-
Clase LectorArchivos:
- Debe ser un componente (
@Component) de Spring. - Incluye un método llamado
leerDatos()que simule la lectura de un archivo con unThread.sleep(2000)y muestre un mensaje al final indicando que la lectura ha terminado.
- Debe ser un componente (
-
Clase Aspecto:
- Define un aspecto con
@Aspecty@Component. - Crea un método con
@Beforeque se ejecute antes del métodoleerDatosy muestre el mensaje: "Tiempo que pasó antes". - Crea un método con
@Afterque se ejecute después del métodoleerDatosy muestre el mensaje: "Tiempo que pasó después".
- Define un aspecto con
-
Clase Config:
- Debe incluir las anotaciones
@Configuration,@ComponentScany@EnableAspectJAutoProxypara habilitar AOP.
- Debe incluir las anotaciones
-
Clase Principal:
- Usa
AnnotationConfigApplicationContextpara iniciar el contexto. - Obtiene el bean
LectorArchivosy ejecuta su métodoleerDatos().
- Usa
🧪 Enunciado: AOP con gestión de acceso a documentos
Crea un pequeño proyecto en Java con Spring y soporte para AOP. El objetivo es interceptar llamadas relacionadas con la visualización y edición de documentos, simulando una gestión de permisos o auditoría.
🔧 Requisitos
📄 Clase DocumentoManager
- Debe ser un componente (
@Component) de Spring. - Contendrá dos métodos públicos:
public void verDocumento(String titulo)→ imprime: "Visualizando documento: <titulo>"public void editarDocumento(String titulo)→ imprime: "Editando documento: <titulo>"
🛡️ Clase AspectoSeguridad
- Marca la clase como
@Aspecty@Component. - Antes de cualquier acceso (
verDocumentooeditarDocumento), muestra el mensaje: "🔐 Comprobando permisos..." - Después de cada operación, muestra el mensaje: "✅ Operación registrada en el sistema de auditoría"
🛠️ Clase Config
- Usa
@Configuration,@ComponentScan, y@EnableAspectJAutoProxy.
▶️ Clase Principal
- Usa
AnnotationConfigApplicationContextpara iniciar el contexto. - Obtiene el bean
DocumentoManager. - Llama a ambos métodos pasando nombres de documentos distintos.
🧪 Enunciado: AOP para simular tiempos de ejecución
Crea un proyecto con Spring y AOP que permita medir el tiempo que tarda en ejecutarse un método, útil para simular tareas costosas como cargar archivos, procesar datos, etc.
🔧 Requisitos
⏳ Clase ProcesadorDatos
- Debe estar anotada con
@Component. - Implementa un método:
public void procesar()- Dentro del método, simula una tarea costosa con
Thread.sleep(1500)y luego imprime:
"Procesamiento completado"
- Dentro del método, simula una tarea costosa con
🕵️ Clase AspectoTiempo
- Anota la clase con
@Aspecty@Component. - Usa una anotación
@Aroundpara interceptar la ejecución del métodoprocesar. - Mide el tiempo antes y después de la ejecución e imprime algo similar a:
"Tiempo de ejecución: 1503 ms"
🛠️ Clase Config
- Usa
@Configuration,@ComponentScan, y@EnableAspectJAutoProxy.
▶️ Clase Principal
- Usa
AnnotationConfigApplicationContext. - Obtiene el bean
ProcesadorDatosy llama a su métodoprocesar().
🧪 Enunciado: AOP para control de acceso
Crea una aplicación de consola en Java utilizando Spring y AOP. El objetivo es simular un control de acceso a métodos restringidos, interceptando su ejecución para mostrar mensajes informativos antes de que se ejecuten.
🔧 Requisitos
📌 Clase AccesoSistema:
- Marca esta clase con
@Component. - Implementa dos métodos
void:public void accederZonaPrivada()→ Imprime: "Accediendo a la zona privada...".public void accederZonaPublica()→ Imprime: "Accediendo a la zona pública...".
📌 Clase AspectoSeguridad:
- Marca la clase con
@Aspecty@Component. - Define un aspecto que:
- Use
@Beforepara interceptar únicamente la ejecución deaccederZonaPrivada()y mostrar el mensaje: "⚠️ Verificando permisos para zona privada". - No es necesario interceptar
accederZonaPublica().
- Use
📌 Clase Config:
- Usa
@Configuration,@ComponentScany@EnableAspectJAutoProxy.
📌 Clase Principal:
- Usa
AnnotationConfigApplicationContextpara iniciar Spring. - Obtén el bean
AccesoSistemay llama a los métodosaccederZonaPrivada()yaccederZonaPublica().
🧪 Ejercicio: Registro de Tiempo de Ejecución de Métodos de Servicio
Crea una aplicación Spring Boot con un servicio que tenga varios métodos simulando operaciones de negocio (por ejemplo: generar informes, procesar datos, etc.).
Usa Spring AOP para crear un aspecto que intercepte todos los métodos del servicio e imprima en consola cuánto tiempo tarda cada método en ejecutarse.
Requisitos:
- Define una interfaz
ServicioOperacionesy una implementación con al menos 3 métodos que tarden un poco en ejecutarse (usaThread.sleep()). - Crea un aspecto con
@Aroundque intercepte las ejecuciones y registre el tiempo de inicio y fin. - Imprime en consola el nombre del método y el tiempo de ejecución en milisegundos.
Este ejercicio te ayudará a entender el uso de aspectos alrededor de métodos y cómo aplicar lógica transversal como el logging o el profiling de manera no invasiva.
🛠️ Ejercicio AOP - Servicios de Producto
En este ejercicio, crearás una aplicación de Spring que maneje servicios de productos utilizando AOP (Aspect-Oriented Programming). La aplicación debe permitir insertar, listar, actualizar y borrar productos mientras se captura información sobre los métodos ejecutados utilizando un Aspect. 📦
📋 Requerimientos
Deberás implementar lo siguiente:
- Clase Producto: Crea una clase
Productocon las siguientes propiedades:id: un identificador único para el producto (tipoint). 🔢nombre: el nombre del producto (tipoString). 🏷️precio: el precio del producto (tipodouble). 💵
- Clase Servicio: Crea una clase
Serviciocon los siguientes métodos:insertarProducto(Producto producto): método para insertar un producto. ➕listarProducto(Producto producto): método para listar un producto. 📜actualizarProducto(Producto producto): método para actualizar un producto. 🔄borrarProducto(Producto producto): método para borrar un producto. ❌
- Configuración de Spring: Configura Spring para utilizar componentes y habilitar el uso de AOP:
- Utiliza
@ComponentScanpara que Spring gestione tus clases como beans. 🧰 - Habilita AOP usando la anotación
@EnableAspectJAutoProxy. ⚙️
- Utiliza
- Aspecto AOP: Crea un aspecto usando
@Aspectpara interceptar los métodos de la claseServicio:- Usa la anotación
@Aroundpara capturar la ejecución de los métodos deServicio. 🔍 - Imprime el nombre del método y los parámetros que recibe cada vez que se ejecute un método de
Servicio. 🖨️
- Usa la anotación
- Clase Main: Crea una clase
Mainpara ejecutar los métodos de la claseServicioy probar su funcionamiento con varios productos. 🚀
📝 Nota: El objetivo de este ejercicio es practicar el uso de AOP para capturar la ejecución de métodos y ver cómo funcionan los aspectos en Spring. Además, se debe aprender a utilizar componentes, configurar beans, y trabajar con la creación de clases de servicio en una aplicación Spring. 🎯