🧪 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
@Aspect
y@Component
. - Añade un método con la anotación
@Before
que 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
@After
que 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
,@ComponentScan
y@EnableAspectJAutoProxy
para activar el escaneo de componentes y el soporte de AOP.
- Usa
-
Clase Principal:
- Usa
AnnotationConfigApplicationContext
para iniciar el contexto Spring manualmente. - Obtiene el bean
Calculadora
y llama a los métodossumar
yrestar
.
- 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
@Aspect
y@Component
. - Crea un método con
@Before
que se ejecute antes del métodoleerDatos
y muestre el mensaje: "Tiempo que pasó antes". - Crea un método con
@After
que se ejecute después del métodoleerDatos
y muestre el mensaje: "Tiempo que pasó después".
- Define un aspecto con
-
Clase Config:
- Debe incluir las anotaciones
@Configuration
,@ComponentScan
y@EnableAspectJAutoProxy
para habilitar AOP.
- Debe incluir las anotaciones
-
Clase Principal:
- Usa
AnnotationConfigApplicationContext
para iniciar el contexto. - Obtiene el bean
LectorArchivos
y 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
@Aspect
y@Component
. - Antes de cualquier acceso (
verDocumento
oeditarDocumento
), 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
AnnotationConfigApplicationContext
para 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
@Aspect
y@Component
. - Usa una anotación
@Around
para 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
ProcesadorDatos
y 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
@Aspect
y@Component
. - Define un aspecto que:
- Use
@Before
para 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
,@ComponentScan
y@EnableAspectJAutoProxy
.
📌 Clase Principal
:
- Usa
AnnotationConfigApplicationContext
para iniciar Spring. - Obtén el bean
AccesoSistema
y 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
ServicioOperaciones
y una implementación con al menos 3 métodos que tarden un poco en ejecutarse (usaThread.sleep()
). - Crea un aspecto con
@Around
que 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
Producto
con 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
Servicio
con 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
@ComponentScan
para que Spring gestione tus clases como beans. 🧰 - Habilita AOP usando la anotación
@EnableAspectJAutoProxy
. ⚙️
- Utiliza
- Aspecto AOP: Crea un aspecto usando
@Aspect
para interceptar los métodos de la claseServicio
:- Usa la anotación
@Around
para 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
Main
para ejecutar los métodos de la claseServicio
y 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. 🎯
