码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC学习 (五)

时间:2015-06-18 19:53:00      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:springmvc

springMVC与spring的整合

springMVC仅仅好比一个组件,而spring却是一个平台。spring平台可以用来整合springMVC、Hibernate,就像是面包板一样。

当然,在不使用spring的情况下,完全可以使用springMVC去整合其他组件,但是这样的话,就使得
springMVC无法专注于自己的web层框架了。毕竟,springMVC中带个“MVC”,它主要用来处理web相关的事务。

因此,项目工程中建议使用spring作为基础,整合各个组件。

如何整合

单独的springMVC基本只需要两个配置文件:web.xml和dispatcherServlet-servlet.xml文件。
前者配置了dispatcherServlet类和contextConfigLocation,即实现servlet对请求的过滤和对dispatcherServlet-servlet.xml的加载。
而具体的视图解析器InternalResourceViewResolver,default-servlet-handler,annotation-driven以及自定义的拦截器、格式转换器等等都是在dispatcherServlet-servlet.xml中配置的。
同时,还在其中配置了标签,对所有组件进行自动扫描。

如今有了spring就不应该让所有的组件被springMVC扫描,而是,除了跟Controller相关的组件之外,其他的组件改为——被spring扫描加载,比如@Service、@Component、@Entity等等。

如果两边都配置了component-scan,并且均为全路径扫描,必然导致所有的组件被初始化两次。
因此在springMVC的配置中(dispatcherServlet-servlet.xml)应该为:

<context:component-scan base-package="com.ghost.spring.employee"  use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

而在spring的配置中(beans.xml)应该这样:

<context:component-scan base-package="com.ghost.spring.employee">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

注意二者的写法不同。
前者中仅包含controller相关的东西,user-default-filters=“false”

而后者并不需要配user-default-filters,默认为true,即全路径扫描,仅仅是exclude跟Controller相关的组件。

如果扫描功能配置有误,则在服务启动过程中会爆出bean无法实例化或Autowired等等。

调用的大小关系

由于springMVC调用底层相关,即controller调用service,可以看出springMVC大于spring,前者可以调用后者的组件,而后者是无法调用前者的组件的。这一点应该牢记。

技术分享

SpringMVC学习 (五)

标签:springmvc

原文地址:http://blog.csdn.net/langduhualangdu/article/details/46550097

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!