SpringMVC中的ViewResolver是怎么使用模板方法
2020-01-03 本文已影响0人
就这些吗
模板方法一般是用到了抽象类,在抽象类中定义abstract方法和普通方法,子类继承的时候abstract方法是必须重写的,而普通方法可以用父类已经写好的(必要的时候也可以进行重写)。
最大的好处:代码复用,减少重复代码。除了子类要实现的特定方法,其他方法及方法调用顺序都在父类中预先写好了。
直接来看下SpringMVC中的的ViewResolver是怎么使用模板方法的吧。
先是ViewResolver接口,里面只有一个resolveViewName方法,这边我们就看看AbstractCachingViewResolver是怎么使用的。
这就是AbstractCachingViewResolver类的具体结构,这是一个抽象类,自己定义了一些方法,然后实现了接口的方法,定义了一个抽象类供子类去实现。(注意名字前面的颜色和小图标,绿色指public方法,黄色指的是protected方法,c指的是类的名字;而带个A字母代表抽象方法本身;有一个△指的是Override了一个方法)
image.pngresolveViewName方法:
- 首先判断缓存中是否存在View,如果不存在则调用 createView() 方法创建View
- 如果有则从缓存中获取View
loadView方法:
用来生成视图对象,而怎么生成,是通过XML文件,还是properties文件,就是子类各自实现的事情了,模板方法的意义也正在此处,resolveViewName方法是可以复用的,而loadView各不相同。
比如XmlViewResolver中的实现:
直接从BeanFactory去取名称相同的bean。
image.png