Spring框架的核心思想我们可以用两个字来描述,那就是"解耦"。应用程序的各个部分之间(包括代码内部和代码与平台之间)尽量形成一种松耦合的结构,使得应用程序有更多的灵活性。应用内部的解耦主要通过一种称为控制反转(IOC)的技术来实现。控制反转的基本思想就是本来由应用程序本身来主动控制的调用等逻辑转变成由外部配置文件来被动控制。通常我们用一个所谓的好莱坞原则(Don't call me. I will call you.)来比喻这种控制反转的关系。由于控制反转的概念相对比较广泛,很多应用服务器实际上也实现了不同程度的控制反转技术,只是这些应用服务器对应用程序的侵入性太强。因此Martin Fowler专门写了一篇文章讨论控制反转这个概念,并提出一个描述更为准确的概念,叫依靠注入(Dependency Injection)。
Spring MVC的主要分发器实现是org.springframework.web.servlet.DispatcherServlet,这是Spring MVC的访问入口。Spring提供SimpleFormController,AbstractCommandController等类来帮助应用构建各种控制器动作,并用ModelAndView类来联系展示和逻辑返回数据。如上节所述,Spring MVC能够支持不同的界面展示技术,而且界面的展示和其后面控制器的实现是分离的,也即界面展示技术的变化不用修改控制器的实现,只需要利用Spring的控制反转技术修改外部配置文件即可。比如,在使用JSP展示技术时,外部配置文件的viewResolver定义如下: