how spring boot works internally