spring 组件
2016-02-16 17:48:22 53 举报
AI智能生成
Spring是一个开源的企业级Java应用框架,它提供了一种简单的方式来开发可扩展的、可维护的和高性能的应用程序。Spring框架的主要目标是简化企业级Java开发,通过提供一系列功能强大的组件来帮助开发者快速构建高质量的应用程序。这些组件包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问、集成测试等。Spring还提供了一个灵活的配置模型,允许开发者根据项目需求进行定制。总之,Spring是一个强大且易于使用的工具,可以帮助开发者更高效地构建和管理企业级Java应用程序。
作者其他创作
大纲/内容
主流程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)
初始化默认组件:之根据接口从bean中查询context.getBean:(name, class)
初始化默认组件:之创建:getDefaultStrategy()
宿主:DispatcherServlet
主流程9大组件手动配置
配置位置
xml中
注解
原理:配置为普通bean即可
参数(解析、绑定、类型转换、setter)、返回值
argumentResolvers
作用:解析参数
宿主:HandlerAdapter;ServletInvocableHandlerMethod(使用者)
class:HandlerMethodArgumentResolverComposite以及最终的Resolvers
使用:InvocableHandlerMethod.getMethodArgumentValues()-->argumentResolvers.resolveArgument()
初始化位置:
默认:RequestMappingHandlerAdapter.afterPropertiesSet() --> getDefaultArgumentResolvers()
xml:
直接在adapter Bean定义的属性中注入:因为是宿主。会覆盖所有默认值;否则,可使用customerArgumentResolvers
配置的customerArgumentResolvers,不会覆盖默认的ArgumentResolvers
parameterNameDiscoverer
作用:解析方法中的参数名及位置(反射很难拿到原生参数名)
宿主:ServletInvocableHandlerMethod
使用:InvocableHandlerMethod.getMethodArgumentValues()-->parameter.initParameterNameDiscovery(this.parameterNameDiscoverer)
interface:ParameterNameDiscoverer
class:DefaultParameterNameDiscoverer
初始化位置:同上
WebDataBinderFactory
作用:参数相关的综合类
线程安全:一个请求对应一个
初始化位置:RequestMappingHandlerAdapter.invokeHandlerMethod()-->getDataBinderFactory()-->createDataBinderFactory()
宿主:ServletInvocableHandlerMethod
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
宿主:HandlerAdapter;ServletInvocableHandlerMethod(使用者)
初始化位置:同上
ModelAndViewContainer
作用:modelAndView生命周期管理,以及传递
类型转换专题:
执行顺序
editer与converter共存时,先执行editor,再执行converter
HttpMessageConverter
作用:对http body(request/response)的转换。通常通过request就可取到参数(form),但针对request body为非key-value时,就采用这种方式。最终是由resolver使用
宿主:RequestMappingHandlerAdapter,(使用者)
配置:
默认:RequestMappingHandlerAdapter构造方法
xml
注意:此处会覆盖默认配置,可实际上不会???是因为afterPropertiesSet在组装依赖之前吗?
默认配置:
ByteArrayHttpMessageConverter
StringHttpMessageConverter
SourceHttpMessageConverter:xml
AllEncompassingFormHttpMessageConverter:form\jackson\gson\xml--前提是jackson\gson对应的jar存在
使用者:封装到default resolver中了
ServletInvocableHandlerMethod(handler方法调用)
作用:handler方法调用
线程安全:一个请求一个
初始化位置:RequestMappingHandlerAdapter.invokeHandlerMethod()-->createInvocableHandlerMethod()
Inteceptor(拦截器)
作用:拦截器
配置
xml
全局
正则
指定handlerMapping私有
要点3
0 条评论
下一页