springmvc上下文与springcontext上下文的关系
原理区别
一直不清楚springmvc-servlet.xml配置与spring.xml两个配置文件出现的上下文关系。今天找到一上面的文章,倒是突然间清楚了。
具体来说,spring.xml上下文与springmvc-servlet.xml上下文是父子容器上下文的关系,他们有以下关系特点:
- spring.xml定义的上下文是父上下文,不能调用子容器的上下文,也就是不能调用springmvc-servlet.xml;
- springmvc-servlet.xml定义的是子类上下问,可以调用父容器spring.xml的上下文内容;
相信看到这里,如果看过java虚拟机规范,应该可以想到它这种设计跟classloader的“双亲委派模型”很类似。
实际应用
知道原理区别后,实际在应用中,往往有两种模式:
传统型
所谓传统型,就是action、service、dao三层架构,基于复杂业务的大公司开发模式。
对这种模式,一般spring上下文控制在service、dao两层,事物完整性也是在service层控制;而springmvc-servlet控制action层。
这样的结果导致以下调用关系:
- action可以调用service、dao;
- service、dao不能调用action;
- spring上下文容器的aop不能应用到action层,但是可以通过在springmvc-servlet.xml中定义来做到类似事情。
激进型
所谓激进型,就是为了速度快捷,不写那么多类,不采用传统的action、service、dao三层模式,直接合一,对接私活等讲求速度的工作可以考虑。
对激进型开发,就简单使用springmvc-servlet.xml这个子上下文来管理所有内容好了。