É uma linguagem e uma feature da JVM que prove para nós uma forma de acessar informações sobre nossa aplicação (classes e objetos) em tempo de execução (runtime). https://codegym.cc/pt/groups/posts/pt.45.api-de-reflexao-reflexao-o-lado-obscuro-de-java
- Escrever códigos mais flexíveis que:
- Conectam diferentes componentes em tempo de execução;
- Criar fluxos sem nenhuma modificação no código-fonte.
- Escrever algoritmos que dinamicamente se adaptam e mudam seu comportamento baseado nos tipos de objetos e classes que estão trabalhando;
- Mais flexibilidade para analisar objetos e classes de uma aplicação em tempo de execução;
- Podemos criar estruturas poderosas como:
- Frameworks;
- Bibliotecas;
- Designs de software.
- JUnit: framework para teste unitário em projetos Java;
- JSON Serialization/Deserialization;
- Jackson;
- Gson.
- Injeção de dependência (ID):
- Spring Boot;
- Google Guice.
- Logging frameworks;
- Ferramentas de ORM (Object-relational Mapping);
- Web Frameworks (Ex: Spring Boot);
- Ferramentas de desenvolvimento;
- Entre outros…