实现自己SpringMVC的RequestMapping

开发后端接口服务时可能会用到SpringMVC, 然而SpringMVC会用到Servlet, 而Servlet又依赖tomcat等容器。
为了高并发要求,我们可以实现部分SpringMVC的功能,而且又不会依赖容器启动。

首先,要写个RequestMapping那样的注解类

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface RequestMapping {

    @AliasFor("value")
    String[] path() default {};

    @AliasFor("path")
    String[] value() default {};

}

然后是扫包代码:
CONTROLLERS_PKG : controller层的包路径
Reflections reflections = new Reflections(CONTROLLERS_PKG);
// 这里的方式是获取继承了BaseController类的所有子类(需要继承该类, 此处和springMVC不同)
// 然后得到 请求路径与类的一一对应关系,放进map中, 这个Map接下来会用到

        Iterator subTypes = reflections.getSubTypesOf(BaseController.class).iterator();
        while (subTypes.hasNext()) {
            Class<? extends BaseController> subClass = (Class<? extends BaseController>) subTypes.next();
            if (subClass.isAnnotationPresent(RequestMapping.class)) {
                String[] paths = (String[]) ArrayUtils.addAll(
                        subClass.getAnnotation(RequestMapping.class).value(),
                        subClass.getAnnotation(RequestMapping.class).path());
                for (String path : paths) {
                    mappings.put(path, subClass);
                }
            }
        }

接下来是接口地址和类的匹配代码
思路很简单,就是取出url中的Path部分,将之作为key,去上一步生成的map中去取value即可

String uri = new URI(request.uri()).getPath()
Class<? extends BaseController> controllerClass = mapping.getController(uri);

value表示相应的类,接下来的工作就简单了, 只需要实例化之再调用相应的方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值