Spring原始碼中的擴充套件性
阿新 • • 發佈:2018-12-15
面向物件開閉原則要求對修改關閉,對擴充套件開放。有良好擴充套件性,抽象很重要。常用的抽象方式: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型別,使得可以啟用來自其他框架的處理程式,整合其他表現層框架。