InternalResourceViewResolver 覆盖问题
来源:5-8 视图内容协商

精慕门5395394
2019-03-28
老师视频中演示 Springboot web模块在启动时会默认加载 :
@Bean
@ConditionalOnMissingBean
public InternalResourceViewResolver defaultViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix(this.mvcProperties.getView().getPrefix());
resolver.setSuffix(this.mvcProperties.getView().getSuffix());
return resolver;
}
我们自定义实现web配置后,InternalResourceViewResolver会有两个(一个是我们自定义,优先级高的,一个是系统默认的最后面一个),但是我在版本2.1.3.RELEASE 测试时发现这个如果我们重写了,会把springboot的覆盖了。
自定义:
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver myViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setOrder(Ordered.LOWEST_PRECEDENCE - 6);
return resolver;
}
}
测试结果如下:
0 = {ContentNegotiatingViewResolver@6715}
1 = {BeanNameViewResolver@6716}
2 = {InternalResourceViewResolver@6717} 自定义的。
3 = {ThymeleafViewResolver@6718}
4 = {ViewResolverComposite@6719}
那是说springboot版本已经把这个功能更新了,还是我使用方式不对?
1回答
-
主要是 Spring Boot 2.1 开始,Spring IoC 容器不允许重复定义 Bean,所以会出现这样的问题
012020-03-30
相似问题