Spring MVC 框架
2016-03-10 10:04:27 12 举报
Spring MVC 框架结构
作者其他创作
大纲/内容
MultipartResolver
核心原理1:所有类bean化2:组装:根据接口找对应实现了接口的bean3:mapping--全部以方法为单位封装成HandlerMethod(有target-controller的引用)
九大组件初始化策略1:由spring bean管理为普通的bean2:dispatcher中初始化:根据class或beanName从spring bean中查找3:driven(META-INFO下)等或者默认配置:dispatcher.propertys中
HandlerAdapter
ParameterNameDiscoverer???
组件生命周期1:组件作用2:组件结构3:组件创建时机与位置4:组件初始化时机与位置5:组件调用流程
HandlerExecutionChain1:HandlerInterceptor2:Handler ---------
1:根据controller查询可能调用当前controller的adapter2:处理参数3:调用controller4:处理返回值
WebDataBinder初始化:1:BeanPropertyBindingResult(包含conversionService) - createBeanPropertyBindingResult2:BeanPropertyBindingResult.getPropertyAccessor --beanWrapper1:取参 - request中所有参数,排除没有的属性。取参数中的值2:setter --bean:ModelAttributeMethodProcessor.bindRequestParameters()--binder.bind() bindRequestParameters通过BeanWrapper把request中参数,按参数名setter到非基本类型的接参参数中3:类型转换:setter时根据执行类型转换:AbstractNestablePropertyAccessor(BeanWrapper).setPropertyValue - (1):convertIfNecessary (2):convertForProperty() --TypeConverterDelegate.convertIfNecessary()--CustomEditor/ConversionService
1:遍历所有intercepter,取指定接口的拦截器bean2:根据url找到对应的hander3:封装成chain--new chain
1:根据request获取local
so 重要
1:mvc入口2:九大组件模版模式调用
LocaleResolver
1:处理返回的异常
ThemeResolver
1:处理业务
1:处理文件上传,把request封装为MultipartRequest
RequestMappingHandlerAdapter:注册WebDataBinderFactory(每个方法调用对应一usr个新的facotry-包含当前RequestMethod)
HandlerMethodReturnValueHandler
WebDataBinderFactory
ViewResolver
1:处理重定向传参
ModelAttributeMethodProcessor1:处理@ModelAttribute2:非简基本类型的参数处理 --一层---参见:supportsParameter()---复杂类型参数填充-resolveArgument()
1:处理主题
RequestMappingHandlerAdapter --ServletInvocableHandlerMethod(注册到当前类中)1:注册各种Resolvers,binder,parameterNameDiscoverer,returnValueHandlers-- 注意:binderFactory是每次调用都new一个,并且把具有@InitBinder的方法设置到facotry中。2:参数处理(《循环》contrller方法所有参数)getMethodArgumentValues --resolveArgument()--处理一个参数(可能是复杂对象)3:执行controller调用invokeForRequest4:处理return value
HandlerMethodArgumentResolver
web.xml
HandlerMapping
DispatcherServlet
1:根据request(url)查找对应的controller:根据url直接查或者遍历所有,查询可匹配的2:实现InitializingBean接口,bean创建后,初始化方法执行前。马上执行initHandlerMethods:把@controller或RequestMapping类中的配置缓存起来(key:url,value:method反射对象),key=url是类中的RequestMapping与方法中的合并
1:查询对应的view(页面)路径2:渲染view
1:处理view为void,转向默认view
BeanWrapper1:实现接口:PropertyEditorRegistry2:实现接口:TypeConverter
1:遍历所有adapter,寻找第一个支持的。责任链模式
Handler
FlashMapManager
HandlerExceptionResolver
RequestToViewNameTranslator
0 条评论
回复 删除
下一页