DispatcherServlet中的两个设计模式(个人理解)

最近在看Spring Boot源码,对其中的DispatcherServlet产生兴趣,观察了请求到达后,该类如何运行的,以及它的涉及的设计模式,做了一下简单的分析。

该类的设计,从结构上来看应该是桥接模式。可以看到,在类设计时,不仅是实现了HttpServlet,还实现Spring特性的接口,在扩展功能的过程中不是盲目的使用单个父类继承关系,这种结构符合桥接模式的定义。

在Spring运行时,将DispatcherServlet实例化,该类具有HttpServlet,处理http请求时,就由DispatcherServlet实例来处理,首先调用了service()方法,该方法的最后实现是在FrameworkServlet中,FrameworkServlet的service方法中有一句super.service(),而父类的HttpServletBean中并没有重写service(),所以进入HttpServlet中的service方法,此时的service方法中,将调用doXXX()方法(例如doGet、doPost等)来处理请求,而这些方法,在该DispatcherServlet实例中有具体的实现,所以将使用实例中的方法,这个过程感觉很像设计模式中的责任链模式(如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推),不过感觉略显牵强。

下图中是运行过程,下划线表示该类中没有此方法的实现,需要到父类中寻找 >>表示方法间调用

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2015-2020 AChampion
  • Powered by Hexo Theme Ayer
  • PV: UV:

开玩笑的~不用打赏