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
.
在我的项目中,我使用了@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
.