@SpringBootApplication is a convenience annotation that adds all of the following: @Configuration tags the class as a source of bean definitions for the application context. @EnableAutoConfiguration tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings. Normally you would add @EnableWebMvc for a Spring MVC app, but Spring Boot adds it automatically when it sees spring-webmvc on the classpath.
This flags the application as a web application and activates key behaviors such as setting up a DispatcherServlet. @ComponentScan tells Spring to look for other components, configurations, and services in the hello package, allowing it to find the controllers.
The MockMvc comes from Spring Test and allows you, via a set of convenient builder classes, to send HTTP requests into the DispatcherServlet
and make assertions about the result.
Note the use of the @AutoConfigureMockMvc together with @SpringBootTest to inject a MockMvc instance.
Having used @SpringBootTest we are asking for the whole application context to be created.
An alternative would be to ask Spring Boot to create only the web layers of the context using the @WebMvcTest.
Spring Boot automatically tries to locate the main application class of your application in either case, but you can override it,
or narrow it down, if you want to build something different.