Reflection permite que um programa inspecione e manipule classes, métodos e campos em tempo de execução — até mesmo aqueles desconhecidos em tempo de compilação. Annotations anexam metadados ao código que ferramentas e frameworks leem (frequentemente via reflection) para impulsionar o comportamento. Juntas, elas alimentam grande parte da "mágica" de frameworks Java (Spring, JPA, JUnit).
Reflection — inspeção e invocação em tempo de execução
Class<?> clazz = Class.forName();
(Field field : clazz.getDeclaredFields()) {
System.out.println(field.getName() + + field.getType());
}
(Method method : clazz.getDeclaredMethods()) {
System.out.println(method.getName());
}
clazz.getDeclaredConstructor().newInstance();
clazz.getMethod(, String.class);
m.invoke(instance, );
clazz.getDeclaredField();
f.setAccessible();
