spring 组件
2016-02-16 17:48:22 举报
AI智能生成
登录查看完整内容
相似推荐
查看更多
spring ioc类图
Spring运行流程
TV跳转公共组件
Spring
组件构成图
后端组件
spring
spring cache
UML组件图
Spring技术
作者其他创作
大纲/内容
spring mvc(4.2.4)
主流程9大组件默认配置
配置位置:xxx-webmvc-xxx.jar/DispatcherServlet.properties
九大组件:
HandlerMapping
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
HandlerAdapter
org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
HandlerExceptionResolver
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
ViewResolver
org.springframework.web.servlet.view.InternalResourceViewResolver
RequestToViewNameTranslator
org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
LocaleResolver
org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
ThemeResolver
org.springframework.web.servlet.theme.FixedThemeResolver
FlashMapManager
org.springframework.web.servlet.support.SessionFlashMapManager
MultipartResolver:没有默认值,必须手动配置.没有配置则不处理
默认初始化位置(DispatcherServlet.initStrategies)
初始化默认组件:之创建:getDefaultStrategy()
宿主:DispatcherServlet
主流程9大组件手动配置
配置位置
xml中
注解
原理:配置为普通bean即可
参数(解析、绑定、类型转换、setter)、返回值
argumentResolvers
作用:解析参数
宿主:HandlerAdapter;ServletInvocableHandlerMethod(使用者)
class:HandlerMethodArgumentResolverComposite以及最终的Resolvers
使用:InvocableHandlerMethod.getMethodArgumentValues()--argumentResolvers.resolveArgument()
初始化位置:
默认:RequestMappingHandlerAdapter.afterPropertiesSet() --\u00A0getDefaultArgumentResolvers()
xml:
直接在adapter Bean定义的属性中注入:因为是宿主。会覆盖所有默认值;否则,可使用customerArgumentResolvers
\u00A0
\u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0
配置的customerArgumentResolvers,不会覆盖默认的ArgumentResolvers
parameterNameDiscoverer
作用:解析方法中的参数名及位置(反射很难拿到原生参数名)
宿主:ServletInvocableHandlerMethod
使用:InvocableHandlerMethod.getMethodArgumentValues()--parameter.initParameterNameDiscovery(this.parameterNameDiscoverer)
interface:ParameterNameDiscoverer
class:DefaultParameterNameDiscoverer
初始化位置:同上
WebDataBinderFactory
作用:参数相关的综合类
线程安全:一个请求对应一个
初始化位置:RequestMappingHandlerAdapter.invokeHandlerMethod()--getDataBinderFactory()--createDataBinderFactory()
WebDataBinder
作用:类型转换,参数封装(复杂类是:携带了一个空的参数对象)
线程安全:一个请求一个
初始化位置:HandlerMethodArgumentResolver(ModelAttributeMethodProcessor).resolveArgument()--binderFactory.createBinder()
使用:HandlerMethodArgumentResolver(ModelAttributeMethodProcessor).bindRequestParameters()--bind()
ConversionService
作用:统一调用converter
配置:配置conversionService Bean即可(factoryBean)
Converter
作用:类型转换、格式化(xx-string)
说明:spring3以后的方式,推荐
配置:
先配置service:ConversionService属性,配置service,并指定converters列表属性
再配置:webBindingInitializer:service为其属性
最后配置:adapter:webBindingInitializer为其属性
初始化
默认converter:DefaultConversionService.构造方法
手动配置:GenericConversionService.add(),service的converters属性配置?不会覆盖--会重复增加???
Formatter
作用:格式化(更细粒度,比convertr格式化好)
CustomEditor
作用:类型转换、格式化
说明:spring3以前的方式,现仍可
配置
全局
私有
通过@InitBinder方法,代码级注入
returnValueHandlers
作用:处理结果值。到ViewResolver前,再次处理的机会:如直接返回response
ModelAndViewContainer
作用:modelAndView生命周期管理,以及传递
类型转换专题:
执行顺序
editer与converter共存时,先执行editor,再执行converter
HttpMessageConverter
作用:对http body(request/response)的转换。通常通过request就可取到参数(form),但针对request body为非key-value时,就采用这种方式。最终是由resolver使用
宿主:RequestMappingHandlerAdapter,(使用者)
默认:RequestMappingHandlerAdapter构造方法
xml
\u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0
注意:此处会覆盖默认配置,可实际上不会???是因为afterPropertiesSet在组装依赖之前吗?
默认配置:
ByteArrayHttpMessageConverter
StringHttpMessageConverter
SourceHttpMessageConverter:xml
AllEncompassingFormHttpMessageConverter:form\\jackson\\gson\\xml--前提是jackson\\gson对应的jar存在
使用者:封装到default resolver中了
ServletInvocableHandlerMethod(handler方法调用)
作用:handler方法调用
初始化位置:RequestMappingHandlerAdapter.invokeHandlerMethod()--createInvocableHandlerMethod()
Inteceptor(拦截器)
作用:拦截器
\u00A0 \u00A0
正则
\u00A0\u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0
指定handlerMapping私有
\u00A0 \u00A0\u00A0\u00A0 \u00A0 \u00A0\u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0 \u00A0 \u00A0 \u00A0 \u00A0\u00A0\u00A0 \u00A0 \u00A0\u00A0\u00A0
要点3
0 条评论
回复 删除
下一页