本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

手写SpringMVC简易DispatchServlet

发布于2020-11-19 20:22     阅读(1038)     评论(0)     点赞(13)     收藏(4)


手写SpringMVC简易DispatchServlet

SpringMVC中的DispatchServlet使用了适配器模式,来适配Controller类。当需要新增Controller类的时候,可以在不修改原有框架代码的基础上,添加HandlerAdapter类即可正常工作。

Controller类

public interface Controller {

}

class AnnotationController implements Controller {
    public void doAnnotationController() {
        System.out.println("annotation...");
    }
}

class HttpController implements Controller {
    public void doHttpHandler () {
        System.out.println("http...");
    }
}

class SimpleController implements Controller {
    public void doSimplerHandler() {
        System.out.println("simple...");
    }
}

HandlerAdapter类

public interface HandlerAdapter {
    void handle(Object controller);
    boolean supports(Object controller);
}

class AnnotationHandlerAdapter implements HandlerAdapter {
    public void handle(Object handler) {
        ((AnnotationController) handler).doAnnotationController();
    }

    public boolean supports(Object handler) {
        return (handler instanceof AnnotationController);
    }
}

class HttpHandlerAdapter implements HandlerAdapter {
    public void handle(Object handler) {
        ((HttpController) handler).doHttpHandler();
    }

    public boolean supports(Object handler) {
        return (handler instanceof HttpController);
    }
}

class SimpleHandlerAdapter implements HandlerAdapter {
    public void handle(Object handler) {
        ((SimpleController) handler).doSimplerHandler();
    }

    public boolean supports(Object handler) {
        return (handler instanceof SimpleController);
    }
}

DispatchServlet类

public class DispatchServlet {

    public static List<HandlerAdapter> handlerAdapters = new ArrayList<>();

    public DispatchServlet() {
        handlerAdapters.add(new AnnotationHandlerAdapter());
        handlerAdapters.add(new HttpHandlerAdapter());
        handlerAdapters.add(new SimpleHandlerAdapter());
    }

    public void doDispatch() {
        AnnotationController controller = new AnnotationController();
        HandlerAdapter adapter = getHandler(controller);
        adapter.handle(controller);
    }

    private HandlerAdapter getHandler(Controller controller) {
        for (HandlerAdapter ha : handlerAdapters) {
            if (ha.supports(controller))
                return ha;
        }
        return null;
    }

    public static void main(String[] args) {
        new DispatchServlet().doDispatch();
    }

}

原文链接:https://blog.csdn.net/weixin_40037938/article/details/109775246



所属网站分类: 技术文章 > 博客

作者:小胖子爱java

链接:http://www.javaheidong.com/blog/article/833/012f1c15a0c40d7b0db1/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

13 0
收藏该文
已收藏

评论内容:(最多支持255个字符)