猪八戒做网站排名,做app网站,南通网站推广优化费用,网站效果图制作SpringBoot已经替我们整合了许多框架并进行了默认的配置#xff0c;我们只需要在依赖中导入spring-boot-starter-web#xff0c;就可以直接使用SpringMVC以及web场景下的已经整合好的功能。但SpringBoot的默认配置可能无法满足我们所有的需求#xff0c;那么我们怎么进行自定…SpringBoot已经替我们整合了许多框架并进行了默认的配置我们只需要在依赖中导入spring-boot-starter-web就可以直接使用SpringMVC以及web场景下的已经整合好的功能。但SpringBoot的默认配置可能无法满足我们所有的需求那么我们怎么进行自定义修改呢
1. 自动配置
SpringBoot的自动配置机制已经在这篇文章中进行了介绍。这里只进行简单说明。
我们在依赖库中导入spring-boot-starter-webspring-boot-starter-web会引入spring-boot-autoconfigure其中包含了所有场景的所有配置类主程序中包含注解EnableAutoConfiguration它会通过Import(AutoConfigurationImportSelector.class)批量导入配置类配置类根据条件注解以及属性绑定将组件都加入到容器中
自动配置的默认效果为
包含了 ContentNegotiatingViewResolver 和 BeanNameViewResolver 组件方便视图解析默认的静态资源处理机制 静态资源放在 static 文件夹下即可直接访问自动注册了 Converter,GenericConverter,Formatter组件适配常见数据类型转换和格式化需求支持 HttpMessageConverters可以方便返回json等数据类型注册 MessageCodesResolver方便国际化及错误消息处理支持 静态 index.html自动使用ConfigurableWebBindingInitializer实现消息处理、数据绑定、类型转化、数据校验等功能
2. 使用方式
SpringBoot 已经默认配置好了Web开发场景常用功能。我们有三种使用他们的方式
2.1 直接使用
我们全部使用自动配置的默认效果直接可以开始编写业务代码。
2.2 自定义修改部分功能
我们可以保留自动配置的效果在自动配置的基础上手动设置部分功能定义MVC底层组件。
2.3 完全手动设置
禁用自动配置效果。我们对所有配置都手动进行设置。
显然我们大多数都会选择第二种方式。在自动配置的基础上进行部分的修改和添加这样可以很好的实现我们的需求工作量也不会很大。
我们只需要给容器中写一个配置类Configuration实现 WebMvcConfigurer但是不要标注 EnableWebMvc注解。
3. EnableWebMvc
为什么第二种方式不可以标注 EnableWebMvc注解 EnableWebMvc有什么效果呢 EnableWebMvc可以禁用默认行为其原因如下
EnableWebMvc给容器中导入 DelegatingWebMvcConfiguration组件而 DelegatingWebMvcConfiguration是继承了WebMvcConfigurationSupport因此这也意味着容器中存在了WebMvcConfigurationSupport类型的组件WebMvcAutoConfiguration有一个核心的条件注解, ConditionalOnMissingBean(WebMvcConfigurationSupport.class)也就是说只有容器中没有WebMvcConfigurationSupport类型的组件WebMvcAutoConfiguration才生效因此EnableWebMvc 导入 WebMvcConfigurationSupport 导致 WebMvcAutoConfiguration 失效最终效果就是禁用了默认行为