- 1.文字介绍
- 2.代码介绍
由上一篇可知当DispatcherServlet初始化的时候会初始化HandlerMapping
而默认的HandlerMapping为RequestMappingHandlerMapping
2.代码介绍这里利用代码简单介绍一下RequestMappingHandlerMapping
代码目录
Controller1.java
@RestController
public class Controller1 {
@GetMapping("/test1")
public String test1(){
System.out.println("1");
return "1";
}
}
WebConfig.java
@ComponentScan
@PropertySource("classpath:application.properties")
@EnableConfigurationProperties({WebMvcProperties.class, ServerProperties.class})
public class WebConfig {
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(ServerProperties serverProperties){
return new TomcatServletWebServerFactory(serverProperties.getPort());
}
@Bean
public DispatcherServlet dispatcherServlet(){
return new DispatcherServlet();
}
@Bean
public DispatcherServletRegistrationBean dispatcherServletRegistrationBean(WebMvcProperties webMvcProperties){
DispatcherServletRegistrationBean registrationBean = new DispatcherServletRegistrationBean(dispatcherServlet(), "/");
registrationBean.setLoadOnStartup(webMvcProperties.getServlet().getLoadOnStartup());
return registrationBean;
}
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping(){
return new RequestMappingHandlerMapping();
}
}
这里是自定义了Bean, 没有利用默认的, 因为默认的逻辑虽然也创建了RequestMappingHandlerMapping, 但是作为了DispatcherServlet的一个成员变量, 没有放入到Spring的ioc容器中, 所以这里为自定义了这个Bean。
A20.java
public static void main(String[] args) {
AnnotationConfigServletWebServerApplicationContext context =
new AnnotationConfigServletWebServerApplicationContext(WebConfig.class);
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
// 路径信息, 控制器方法
Map map = handlerMapping.getHandlerMethods();
map.forEach((k, v) -> {
System.out.println(k + " = " + v);
});
}
得到了Controller1的test1方法
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/test1");
HandlerExecutionChain chain = handlerMapping.getHandler(request);
System.out.println(chain);
这里是模拟的Get请求去请求test1路径的控制器, 生成一个链条



