事实证明,Spring Boot与标准Spring MVC @EnableWebMvc
不能很好地融合@EnableWebMvc
。 添加注释时发生的事情是禁用了Spring Boot自动配置。
不好的部分(浪费了我几个小时)是,在任何指南中,您都找不到明确指出的内容。 在本指南中,它说Spring Boot是自动添加它的,但是没有说如果您按照以前的经验并仅添加注释会发生什么。
实际上,由于这种自动禁用的自动配置而出现问题的人们正试图以各种方式解决该问题。 最常见的是-保留@EnableWebMvc,同时扩展Spring Boot的WebMvcAutoConfiguration
。 就像这里 , 这里 , 这里 有些 。 在我有了主意并以这种方式实施后,我找到了他们。 然后,在通过Spring Boot的代码并看到autoconfiguration类中的内部类具有一行Javadoc声明之后,意识到这样做是多余的
配置等同于{@code @EnableWebMvc}。
这就回答了我的问题,即Spring启动自动配置是否缺少某些EnableWebMvc“功能”。 他们扩展提供EnableWebMvc的类,而不是镜像功能(这很明显,我想),这是很好的。
要自定义bean时应该怎么做? 与往常一样,扩展WebMvcConfigurerAdapter
(使用@Component
注释新类)并进行自定义。
因此,特定问题的底线是:不要在Spring Boot中使用@EnableWebMvc,只需将spring-web作为maven / gradle依赖项包括在内,它将被自动配置。
这里的大图使我在主配置类中添加了一条注释,详细说明了为什么不应将@EnableWebMvc
放在此处。 因此,自动配置魔术为我节省了很多工作,但我仍然添加了一行以解释为什么不存在某些内容。
那是由于常见的用例 -人们习惯了使用@EnableWebMvc
。 因此,最自然,最常见的做法是添加它,尤其是在您不知道Spring Boot自动配置如何详细工作的情况下。 而且他们会继续这样做,并浪费了几个小时才意识到自己应该删除它(或者在扩展一堆启动类以达到相同效果之前)。
在这种情况下,我的建议是:记录警告。 并要求明确禁用自动配置以摆脱警告。 我必须打开调试以查看自动配置的内容,然后探索一堆类以检查必要条件以弄清楚情况。
Spring Boot的主要用例之一是jar打包的Web应用程序。 我猜这就是大多数教程的目的,而这正是它最常用于的目的。 因此,对于这种常见用例应该有特殊的对待-附加的日志和日志信息可以帮助人们度过自动配置的迷宫。
我不想被看作是“指导” Spring团队,他们在拥有良好的文档和简单的行为方面做得非常出色。 但是在这种情况下,多个子项目“碰撞”,似乎可以改进。
翻译自: https://www.javacodegeeks.com/2017/04/spring-boot-enablewebmvc-common-use-cases.html