What are the core components of a Spring Boot application, and how does auto-configuration work under the hood?