how spring boot application works internally