《玩转Spring全家桶》第39-47节

第39节 认识Spring MVC Controller

DispatcherServlet核心组成:

  • Controller
  • xxxResolver
  • ViewResolver
  • HandlerExceptionResolver
  • MultipartResolver
  • HandlerMapping
    SpringMVC常用的注解
  • @Controller
  • @RESTController
  • @RequestMapping
  • @GetMapping /@PostMapping
  • @PutMapping / @DeleteMapping
  • @RequestBod y/ @ResponseBody / @ResponseStatus
第40节 理解Spring的应用上下文

在这里插入图片描述

关于上下文常用的接口及其实现

  • BeanFactory
  • DefaultListableBeanFactory
    
  • ApplicationContext
  • ClassPathXmlApplicationContext
    
  • FileSystemXmlApplicationContext
    
  • AnnotationConfigApplicationContext
    
  • WebApplicationContex
    

一般不用BeanFactory注解。

在这里插入图片描述
FooConfig.java:父上下文(parent application context)。
applicationContext.xml:子上下文(child application context)。

FooConfig.java 中定义两个 testBean,分别为 testBeanX(foo) 和 testBeanY(foo)。
applicationContext.xml 定义了一个 testBeanX(bar)。

委托机制:在自己的 context 中找不到 bean,会委托父 context 查找该 bean。


代码解释:
fooContext.getBean(“testBeanX”),在父上下文查找 testBeanX,命中直接返回 testBeanX(foo)。
barContext.getBean(“testBeanX”),在子上下文查找 testBeanX,命中直接返回 testBeanX(bar)。
barContext.getBean(“testBeanY”),在子上下文查找 testBeanY,未命中;委托父上下文查找,命中,返回 testBeanY(foo)。


场景一:
父上下文开启 @EnableAspectJAutoProxy 的支持
子上下文未开启 <aop: aspectj-autoproxy />
切面 fooAspect 在 FooConfig.java 定义(父上下文增强)

输出结果:
testBeanX(foo) 和 testBeanY(foo) 均被增强。
testBeanX(bar) 未被增强。

结论:
在父上下文开启了增强,父的 bean 均被增强,而子的 bean 未被增强。


场景二:
父上下文开启 @EnableAspectJAutoProxy 的支持
子上下文开启 <aop: aspectj-autoproxy />
切面 fooAspect 在 applicationContext.xml 定义(子上下文增加)

输出结果:
testBeanX(foo) 和 testBeanY(foo) 未被增强。
testBeanX(bar) 被增强。

结论:
在子上下文开启增强,父的 bean 未被增强,子的 bean 被增强。


根据场景一和场景二的结果,有结论:“各个 context 相互独立,每个 context 的 aop 增强只对本 context 的 bean 生效”。如果想将切面配置成通用的,对父和子上下文的 bean 均支持增强,则:

  1. 切面 fooAspect 定义在父上下文。
  2. 父上下文和子上下文,均要开启 aop 的增加,即 @EnableAspectJAutoProxy 或<aop: aspectj-autoproxy /> 的支持。
第41节 理解请求处理机制

Spring MVC的请求处理流程
在这里插入图片描述

一个请求的大致处理流程:
绑定一些Attribute

  • WebApplicationContext / LocaleResolver / ThemeResolver
    处理Multipart
  • 如果是,则将请求转为MultipartHttpServletRequest
    Handler处理
  • 如果找到对应Handler,执行Controller及前后置处理器逻辑
    处理返回的Model,呈现视图
第42-43节定义处理方法

定义映射关系:
@Controller
@RequestMapping

  • path / method 指定映射路径与方法
  • params / headers限定映射范围
  • consumes / produces限定请求与响应格式
    一些快捷方式
  • @RESTController
  • @GetMapping / @PostMapping / @PutMapping / @DeleteMapping / @PatchMapping
    在这里插入图片描述
    在这里插入图片描述

自己实现WebMvcConfigure

  • Spring Boot在WebMbcAutoConfiguration中,有一个自己实现
  • 添加自定义的Converter
  • 添加自定义的Formatter
    定义校验:
  • 通过Validator对绑定结果进行校验
  • Hibernate Validator
  • @Valid注解
  • BindingResult
    MultipartFile上传:
  • 配置MultipartResolver
  • Spring Boot自动配置MultipartAutoConfiguration
  • 支持类型multipart/form-data
  • MultipartFile类型
第44-45节 Spring MVC中的视图解析机制

视图解析的实现基础:主要是通过viewResolver与View接口实现的

  • AbstractCachingViewResolver
  • UrlBasedViewResolver
  • FreeMarkerViewResolver
  • ContentNegotiatingViewResolver
  • InternalResourceViewResolver
    DispatcherServlet重的视图解析逻辑:
  • initStrategies()
  • initViewResolvers()初始化了对应ViewResolver
  • doDispatch()
  • processDispatchResult()
  • 没有返回视图的话,尝试RequestToViewNameTranslator
  • resolveViewName()解析View对象
    在这里插入图片描述

两种不同的重定向前缀:

  • redirect:
  • forward:

在这里插入图片描述

第46-47Spring MVC中常用的视图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值