Main point: because they have no other choice.
Java is not a dynamic language, so the only way these frameworks can provide their services is by reflection.
Second, notice that most of the reflection work these framework do happens only once, during initialization, so the runtime performance is not affected.
About the performance of reflection
There is one distinction that I notice being mixed up all the time:
- reflective lookup of members;
- reflective member access (invocation/read/write).
Number 1 is slow (this is the "orders" you mention); number 2 is the one that has received significant speed improvements and is now only a couple of times slower than native access.