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

Posted

技术标签:

【中文标题】Spring Boot RestController 在没有 SpringBootApplication 的情况下如何工作?【英文标题】:How does Spring Boot RestController works without SpringBootApplication? 【发布时间】:2020-10-21 17:55:09 【问题描述】:

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

    @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));
  


【问题讨论】:

请阅读sping boot架构更多细节 【参考方案1】:

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

通常使用spring-boot-starter-web自动完成。

更多细节:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-auto-configuration

如果你想完全控制 Spring MVC,你可以添加自己的 @Configuration 并使用 @EnableWebMvc 注释,或者添加自己的 @Configuration-annotated DelegatingWebMvcConfiguration,如 @EnableWebMvc 的 Javadoc 中所述。

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于Spring Boot RestController 在没有 SpringBootApplication 的情况下如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Boot:同时处理多个请求

spring Restcontroller 或 RepositoryRestResource 用啥

Spring:RestController 和 Controller 的不同异常处理程序

Spring Boot 学习例子

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?