springmvc 动态注册路由
引言
对于javaer来说,做web开发时springmvc是经常使用的框架。使用springmvc可以很方便的添加一个路由,只需要使用@Controller注解或者@RestController注解即可。在做业务开发时我们几乎都是这么做的,但是当我们开发的是通用组件时,如果使用这种方式,就会侵入业务代码,或者需要业务多做一些额外的配置。因此,我们需要有其他方式来做动态路由的注册
目标
业务方不需要添加Controller或者包含@Controller注解的bean即可完成路由注册
方案
在springmvc框架中,实际上提供了类似的组件,这个组件就是RequestMappingHandlerMapping,全路径org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
@Override
public void registerMapping(RequestMappingInfo mapping, Object handler, Method method) {
super.registerMapping(mapping, handler, method);
updateConsumesCondition(mapping, method);
}
通过registerMapping即可,参数如下
mapping(RequestMappingInfo),标识请求的path信息,可以通过内置的方法快速构造
RequestMappingInfo.paths("/foo", "/bar").build()
hanlder(Object),method(Method),这两个是一对,分别表示处理请求的方法所属的类实例和具体的方法
RequestMappingHandlerMapping可以直接注入,在springmvc启动时会自动创建
动态注册路由如下
requestMappingHandlerMapping.registerMapping(
RequestMappingInfo.paths("/foo").build(),
executorEndpoint,
ReflectUtil.getMethod(ExecutorEndpoint.class, "foo", String.class)
);
至此,动态路由注册完成