Historia de la cuestión:
Las anotaciones aparecieron en Java 5 para agregar metainformación al bytecode sin cambiar la lógica misma del programa. A través de anotaciones, es fácil proporcionar información adicional a clases y métodos para frameworks, compiladores o analizadores.
Problema:
Anotaciones mal diseñadas o mal utilizadas complican el mantenimiento del código. A veces, los desarrolladores confunden la aplicabilidad de las anotaciones o no entienden cómo crear las suyas propias, y no saben de la posibilidad de crear anotaciones con parámetros.
Solución:
Creación de una anotación personalizada:
import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { String value() default ""; }
Uso de la anotación:
public class TestClass { @MyTest("Ejemplo") public void testMethod() {...} }
Características clave:
¿Puede una anotación heredar de otra anotación?
Respuesta: No, las anotaciones en Java no soportan herencia entre sí.
¿Se puede hacer que el uso de la anotación sea obligatorio en todos los herederos de la clase?
Respuesta: No directamente. Es necesario verificar la presencia de la anotación a través de la reflexión, implementando manualmente dicho control.
¿Cuál es la diferencia entre @Retention(CLASS) y @Retention(RUNTIME)?
Respuesta:
En el proyecto se decidió reemplazar la configuración a través de xml por anotaciones, pero no se agregó @Retention(RUNTIME)
Ventajas:
Desventajas:
Se configuró una anotación personalizada @Audit en métodos, que controla la auditoría de operaciones de negocio, con la reflexión de la llamada real de la lógica en el servidor.
Ventajas:
Desventajas: