As the increase of the amount and diversity of distributed applications, middlewares are expected to be flexible, adaptive and context-aware. Reflection allows a program to access, reason about and alter its own interpretation, thus making it possible to build middlewares which can meet the requirements above. First, detailed information about computational reflection is presented: its origin, definition, related concepts and applications. Then reflective middleware and component technology are explained. In the following section, several selected research projects are introduced in order to show different ways people have used to construct reflective middlewares. Finally, some suggestions for future work are made.