一:Spring中运用了大量的面向接口编程,面向抽象编程的设计方法。通过遍历实现了某个接口的所有实现类,找到匹配的实现类,向上转型为接口,最后通过接口调用接口方法,通过运行时多态来调用实现类的实现方法。因此,如果想要自定义组件,如自定义过滤器,自定义返回值处理器,自定义参数解析器,自定义视图解析器等都可以通过实现或继承某个接口来完成。
二:几个重要接口介绍:
1.HandlerMapping:接口方法是getHandler方法,作用是获取匹配的handler。实现类为抽象类AbstractHandlerMapping,抽象类的getHandlerInternal方法,被自己子类AbstractHandlerMethodMapping重写,该子类通过lookupHandlerMethod返回匹配的handler。DispatcherServlet通过遍历所有的HandlerMapping来匹配正确的handler
2.HandlerAdapter:获取适配器Adapter,具有一个handle方法。DisPatcherServlet通过遍历所有的HandlerApdapter实现类来匹配可以处理具体handler的Adapter,设计基本与HandlerMapping一致。
3.HandlerInterceptor:拦截请求,有三个拦截方法,分别是preHandle,postHandle,afterCompletion,Spring也是在DispatcherServlert中通过遍历容器中所有的HandlerInterceptor,在不同时期调用对应的拦截方法.开发者可以通过实现该接口进而将实现接口方法从而自定义拦截器
4.HandlerExceptonResolver:处理异常,具有resolveException方法,Spring也是通过遍历所有的异常解析器来匹配可以解析具体异常的解析器。开发者可以通过实现该接口来完成自定义异常解析器。
可以 通过继承RuntimeException或者Exception来自定义异常类,并通过特定的注解来指定哪个异常处理器来处理该异常
5.ViewResolver:寻找视图解析器,具有方法resolveViewName,通过ModelAndView中保存的视图名来遍历寻找合适的视图解析器。开发者可以通过实现该接口来自定义视图解析器
6.View:解析视图,具有render方法,解析视图。开发者可以通过实现该接口的render方法来实现解析视图的方法
7.ArgumentConverter:类型转换器,Spring中的类型转换器都实现了该接口,开发者可以通过实现该接口来自定义类型转换器
8.ParamerResolver:参数解析器,Spring中的参数解析器都实现了该接口,开发者可以通过实现该接口来自定义参数解析器
9 .ReturnValueHandler:返回值处理器,Spring中的返回值处理器都实现了该接口,开发者可以通过实现该接口来自定义返回值处理器
另外:SpringBoot中通过WebMvcConfigurer该接口可以向容器中添加自定义组件。通过实现特定的接口,可以自定义组件,如实现HandlerInterceptor,HandlerExceptonResolver,ArgumentConverter等接口