Spring Boot RestController 在没有 SpringBootApplication 的情况下如何工作?

How does Spring Boot RestController works without SpringBootApplication?

在我的项目中,我使用了@Configuration、@EnableAutoConfiguration、@ComponentScan 和带注解的ImportResource 配置。我没有使用@SpringBootApplication,但应用程序在没有@SpringBootApplication 注释的情况下构建成功。我不明白为什么 @RestController class 没有被调用?

    @Configuration
@EnableAutoConfiguration(exclude = {
        //removed default db config
        DataSourceAutoConfiguration.class, XADataSourceAutoConfiguration.class})
@ComponentScan(basePackages = { "com.test.debasish.dummy" }, excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Test.class))})
@ImportResource( value = {"classpath*:*beans*.xml"})
public class TestApplication{
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}



@RestController
public class TestController {
  private static final String template = "Hello, %s!";
  private final AtomicLong counter = new AtomicLong();


  @GetMapping("/test")
  @ResponseBody
  public Greeting getResource(@RequestParam(name="name", required=false, defaultValue="Stranger") String name) {
    
    return new Greeting(counter.incrementAndGet(), String.format(template, name));
  }

}

之所以有效,是因为@springbootapplication注解也包含了@Configuration,
@EnableAutoConfiguration、@ComponentScan 注解。见下图

https://i.stack.imgur.com/PKkb8.jpg

您需要设置 spring-webmvc 才能使用 @RestController

通常情况下,使用 spring-boot-starter-web.

会自动完成

更多详情:

If you want to take complete control of Spring MVC, you can add your own @Configuration annotated with @EnableWebMvc, or alternatively add your own @Configuration-annotated DelegatingWebMvcConfiguration as described in the Javadoc of @EnableWebMvc.