SpringMvc整合Spring

来源:互联网 发布:西门子ug软件侵权 编辑:程序博客网 时间:2024/06/08 01:25

理论上一个SpringMvc的配置文件就可以解决所有的问题,但是通常情况下, 类似于数据源, 事务, 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中). 实际上放入 Spring 配置文件对应的 IOC 容器中的还有 Service 和 Dao.

如果Spring和SpringMvc的配置文件同时存在,那么会存在一些问题:比如

 Spring 的 IOC 容器和 SpringMVC 的 IOC 容器扫描的包有重合的部分, 就会导致有的 bean 会被创建 2 次.

为了解决这个问题可以采用如下的方法:

首先需要配置一下扫描的路径:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xmlns="http://java.sun.com/xml/ns/javaee"         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"         id="WebApp_ID" version="2.5">  <servlet>    <servlet-name>springDispatcherServlet</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath:springmvc.xml</param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>springDispatcherServlet</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping>  <!-- 配置启动 Spring IOC 容器的 Listener -->  <!-- needed for ContextLoaderListener -->  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:beans.xml</param-value>  </context-param>  <!-- Bootstraps the root web application context before servlet initialization -->  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener></web-app>

1)规定SpringMvc只扫描一部分的注解

<context:component-scan base-package="com.test" use-default-filters="false">        <context:include-filter type="annotation"                                expression="org.springframework.stereotype.Controller"/>        <context:include-filter type="annotation"                                expression="org.springframework.web.bind.annotation.ControllerAdvice"/>    </context:component-scan>


2)规定Spring扫描跳略某些注释的扫描

 <context:component-scan base-package="com.test">        <context:exclude-filter type="annotation"                                expression="org.springframework.stereotype.Controller"/>        <context:exclude-filter type="annotation"                                expression="org.springframework.web.bind.annotation.ControllerAdvice"/>    </context:component-scan>

最后还有一个Bean的优先级加载问题:

Spring MVC WEB 层容器可作为 “业务层” Spring容器的子容器:即 WEB 层容器可以引用业务层容器的 Bean,而业务层容器却访问不到 WEB 层容器的 Bean

也就是说如果你想要在被@Service注解标注的方法中自动装配被@Controller注解标注的方法是无法装配上的。

0 0
原创粉丝点击