当然在学习配置扩展肯定离不开我们官方文档
初次尝试
我们需要编写一个@Configuration注解类,我们要继承WebMvcConfigurer接口实现方法,还不能标注@EnableWebMvc注解
步骤:
- 在我们目录下创建…/config文件夹,里面文件存放的是我们想要编写的注解类
// 如果。你想定义一些定制化的功能。只要写这个组件,然后将它交给springboot,springboot就会帮我们自动装配
//扩展 springMVC dispatchservlet
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//public interface ViewResolver 实现了视图解析器接口的类,我们就可以把他看作视图解析器
//把咱们自己定义的视图解析器返回给springboot处理,进行自动装配
@Bean
public ViewResolver myViewResolver(){
return new MyViewResolver();
}
//自定义了一个自己的视图解析器
public static class MyViewResolver implements ViewResolver{
@Override
public View resolveViewName(String s, Locale locale) throws Exception {
return null;
}
}
}
- 通过debug检查我们自己定义的视图解析器是否被加载
- 双击shift进行查询dispatchservlet,在他接受请求和响应的方法上打上相应的断点
- 运行debug查看
观察,这时我们就可以查看到,自己编写的注解类被自动装配了,并封存在bean中
注意:打断点以后需要访问http://localhost:8080/
来激活debug
- 双击shift进行查询dispatchservlet,在他接受请求和响应的方法上打上相应的断点
再探配置扩展
自定义配置类实现页面跳转
步骤:
- 在我们MyMvcConfig文件中改写一下代码,进行重写addViewControllers方法,实现简单页面跳转功能
//如果我们要扩展springmvc,官方建议我们这样做
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
//视图跳转
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/zheng").setViewName("test");
}
}
- 在templates/… 文件下创建test.html页面,当作我们的跳转页面
<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>页面</h1>
<hr>
</body>
</html>
- 测试
注意:路径问题,addViewController路由要跳转的路径,setViewName要跳转的页面
简单提一嘴:如果你在配置类上添加了@EnableWebMvc,他会导入WebMvcConfigurationSupport.class这样一个类,这个类一旦加入进来一的所有自动配置都会失效,自然页面也不会呈现。
如果实在想加:推荐你们看一下WebMvcAutoConfiguration.class这个类的底层代码,你会发现很多有趣的东西
总结
- 在自己定义配置类的时候一定要在类上加上@Configuration 证明我们现在是要编写配置类了
- 注意引用WebMvcConfigurer接口,定义这是一个springMVC扩展配置类
- 要通过@Bean把自定义的视图解析器处理给springboot,进行自动装配
- 在springboot中,有非常多的 xxxx Configuration 会帮助我们进行扩展配置,只要看见了这个东西,我们就要注意了
- @EnableWebMvc推荐不加