Reflection
Reflection ist die Fähigkeit von Java, zur Laufzeit Klassen, Felder und Methoden zu inspizieren und zu nutzen — ohne den Code beim Kompilieren zu kennen.
Basis für Dependency Injection, Hibernate und alle Annotations-getriebenen Frameworks.
I. Beispiel
Class<?> clazz = Class.forName("de.levi.learning.Greeting");
Object obj = clazz.getDeclaredConstructor().newInstance(); // no-arg ctor!
Field f = clazz.getDeclaredField("message");
f.setAccessible(true);
f.set(obj, "Hallo");
II. Wer nutzt es?
- Hibernate → erzeugt @Entity-Instanzen via no-arg-Konstruktor
- CDI / WildFly → liest Annotationen und injiziert Felder
- Frameworks generell
Warning
Deshalb: @Entity braucht public no-arg Konstruktor, sonst kann Hibernate keine Instanz erzeugen.
III. .NET-Pendant
System.Reflection (Type.GetType, PropertyInfo, ...).