1、定制化的常见方式
- 修改配置文件;
- xxxxxCustomizer;
- 编写自定义的配置类 xxxConfiguration;+ @Bean替换、增加容器中默认组件;视图解析器
Web应用 编写一个配置类实现** **WebMvcConfigurer 即可定制化web功能;+ @Bean给容器中再扩展一些组件
(主要)
@Configuration public class AdminWebConfig implements WebMvcConfigurer
- @EnableWebMvc + WebMvcConfigurer —— @Bean 可以全面接管SpringMVC,所有规则全部自己重新配置; 实现定制和扩展功能
-
- 原理
- 1、WebMvcAutoConfiguration :默认的SpringMVC的自动配置功能类。静态资源、欢迎页等等一堆的配置
- 2、一旦使用 @EnableWebMvc ,会 @Import(DelegatingWebMvcConfiguration.class)
- 3、DelegatingWebMvcConfiguration 的 作用,只保证SpringMVC最基本的使用
-
-
- 把所有系统中的 WebMvcConfigurer 拿过来。所有功能的定制都是这些 WebMvcConfigurer 合起来一起生效
- 自动配置了一些非常底层的组件。比如RequestMappingHandlerMapping,这些组件依赖的组件都是从容器中获取
- public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport
-
-
- 4、WebMvcAutoConfiguration 里面的配置要能生效 ,容器中必须没有WebMvcConfigurationSupport 这个类 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
- 5、@EnableWebMvc 导致了 WebMvcAutoConfiguration 没有生效。( @EnableWebMvc会给容器中导入DelegatingWebMvcConfiguration,相当于导入了WebMvcConfigurationSupport)
场景启动器starter
--->场景启动器导入一系列的自动配置 xxxxAutoConfiguration--->【5、定制化原理】这些自动配置里面通过@Bean给容器中 导入xxx组件--->组件的默认属性绑定xxxProperties--->这些Properties
绑定配置文件项
如果以后想扩展SpringMvc:写一个实现了WebMvcConfigurer的配置类 即可定制化web功能 + @Bean给容器中再扩展一些组件
或者
导入场景启动器starter,然后修改配置文件(yaml)
推荐阅读
- 4、SpringBoot嵌入式Servlet容器
- 总结一下本周遇到的问题
- 三级缓存的简要源码解析
- 【xxl-job】分布式任务调度平台 使用总结
- spring-security登录流程和集成JWT功能
- SpringBoot内嵌JAR免解压加载原理