1. 程式人生 > >Spring原始碼中的擴充套件性

Spring原始碼中的擴充套件性

面向物件開閉原則要求對修改關閉,對擴充套件開放。有良好擴充套件性,抽象很重要。常用的抽象方式:abstract類和interfaces。Spring的HandlerAdapter能適配到真正幹活的Handler(controller),HandlerAdapter以interfaces型別和Object引數,使得Spring擴充套件和相容性良好。

spring的DispatchServlet核心程式碼
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
mv = ha.handle(processedRequest,
response, mappedHandler.getHandler());

介面註釋
在這裡插入圖片描述
HandlerAdapter 介面使得DispatchServlet有良好擴充套件性,只需getHandlerAdapter返回對於的實現類即可,有新的HandlerAdapter只需實現介面即可,原有的實現類不用改動,實現類可以無限擴充套件。

HandlerAdapter 核心方法
public interface HandlerAdapter {
ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception; }

介面註釋
在這裡插入圖片描述
第三個引數Object handler可看出處理程式是Object型別,而不是某類限定interface型別,使得可以啟用來自其他框架的處理程式,整合其他表現層框架。