Reflection cho phép một chương trình kiểm tra và thao tác các class, method, và field tại runtime — kể cả những thứ chưa biết tại compile time. Annotation gắn metadata vào code mà các công cụ và framework đọc (thường thông qua reflection) để điều khiển hành vi. Cùng nhau, chúng tạo nên phần lớn "phép màu" của các framework Java (Spring, JPA, JUnit).
Reflection — kiểm tra và gọi tại runtime
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();
