Kurz erklärt
Reflection erlaubt einem Programm, zur Laufzeit seine eigene Struktur zu untersuchen und zu verändern: Klassen, Methoden, Felder und Annotationen abfragen, Objekte erzeugen und Methoden aufrufen, deren Namen erst zur Laufzeit feststehen.
Genauer
Frameworks nutzen Reflection intensiv: Dependency-Injection-Container (Dependency Injection), ORMs, Serialisierer (Serialisierung) und Test-Frameworks finden Klassen und Methoden anhand ihrer Namen oder Annotationen, ohne sie zur Übersetzungszeit zu kennen.