配置类
@Configuration
@ComponentScan
@PropertySource("classpath:application.properties")
@EnableConfigurationProperties({WebMvcProperties.class, ServerProperties.class})
public class WebConfig {
// 创建web容器工厂
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(ServerProperties serverProperties){
return new TomcatServletWebServerFactory(serverProperties.getPort());
}
// 创建DispatcherServlet
@Bean
public DispatcherServlet dispatcherServlet(){
return new DispatcherServlet();
}
@Bean
public DispatcherServletRegistrationBean dispatcherServletRegistrationBean(DispatcherServlet dispatcherServlet,WebMvcProperties webMvcProperties
){
DispatcherServletRegistrationBean registrationBean = new DispatcherServletRegistrationBean(dispatcherServlet, "/");
registrationBean.setLoadOnStartup(webMvcProperties.getServlet().getLoadOnStartup());
return registrationBean;
}
@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping(){
return new RequestMappingHandlerMapping();
}
}
Controller
@RestController
public class UserController {
@GetMapping("/test1")
public String test1(){
return "test1";
}
@PostMapping("/test2")
public String test2(){
return "test2";
}
@RequestMapping("/test3")
public String test3(){
return "test3";
}
}
启动类
private static final Logger log = LoggerFactory.getLogger(A20.class);
public static void main(String[] args) {
AnnotationConfigServletWebServerApplicationContext context =
new AnnotationConfigServletWebServerApplicationContext(WebConfig.class);
// 解析@RequestMapping注解 生成路径和控制器方法得映射关系
RequestMappingHandlerMapping requestMappingHandlerMapping = context.getBean(RequestMappingHandlerMapping.class);
// 查看生成的结果 key为路径信息 | 请求方式,value为method
Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods();
handlerMethods.forEach((k,v)->{
System.out.println(k + "=" + v);
});
}
通过RequestMappingHandlerMapping可以获得对应的请求路径请求方式对应的方法Map
打印结果如下
测试获取路径映射对应的method
// 解析@RequestMapping注解 生成路径和控制器方法得映射关系
RequestMappingHandlerMapping requestMappingHandlerMapping = context.getBean(RequestMappingHandlerMapping.class);
// 查看生成的结果 key为路径信息 | 请求方式,value为method
Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods();
handlerMethods.forEach((k,v)->{
System.out.println(k + "=" + v);
});
// 请求来了,获取控制器方法 这里返回的不是handlerMethod返回处理器执行链,里面包括了请求的拦截器
HandlerExecutionChain handler = requestMappingHandlerMapping.getHandler(new MockHttpServletRequest("GET", "/test1"));
System.out.println(handler);
返回的并不是只有method方法,而是包括了拦截器等组成的一个执行器链!