• SpringMVC系列(十五)Spring MVC与Spring整合时实例被创建两次的解决方案以及Spring 的 IOC 容器和 SpringMVC 的 IOC 容器的关系


    一、Spring MVC与Spring整合时实例被创建两次的解决方案

    1.问题产生的原因

    Spring MVC的配置文件和Spring的配置文件里面都使用了扫描注解<context:component-scan base-package="com.study.springmvc" />

    2.解决方案

    2.1. 使 Spring 的 IOC 容器扫描的包和 SpringMVC 的 IOC 容器扫描的包没有重合的部分,把Handler和service/DAO放在不同的包下
    2.2. 使用 exclude-filter 和 include-filter 子节点来规定只能扫描的注解

    springmvc.xml的配置,限制只扫描Handle的注解@Controller和异常处理的注解@ControllerAdvice

    1 <context:component-scan base-package="com.study.springmvc" use-default-filters="false">
    2         <context:include-filter type="annotation" 
    3             expression="org.springframework.stereotype.Controller"/>
    4         <context:include-filter type="annotation" 
    5             expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
    6 </context:component-scan>

     spring的配置,限制不扫描Handle的注解@Controller和异常处理的注解@ControllerAdvice

    1 <context:component-scan base-package="com.study.springmvc">
    2         <context:exclude-filter type="annotation" 
    3             expression="org.springframework.stereotype.Controller"/>
    4         <context:exclude-filter type="annotation" 
    5             expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
    6 </context:component-scan>

    二、Spring 的 IOC 容器和 SpringMVC 的 IOC 容器的关系

    SpringMVC 的 IOC 容器中的 bean 可以来引用 Spring IOC 容器中的 bean,反之不行,原因是:

    1.Spring MVC是Spring的子类,子类可以引用父类,父类不能引用子类

    2. 从软件层面上来说,Spring MVC是展示层可以调用业务层,业务层不能调用展示层

  • 相关阅读:
    flask-离线脚本、with在上下文的应用
    websocket原理及实时投票
    微信消息的推送
    Django + Uwsgi + Nginx 的生产环境部署2
    UVA 11853 Paintball
    UVA 12171 Sculpture
    UVA 10305 Ordering Tasks
    UVA 816 Abbott's Revenge
    UVA 699 The Falling Leaves
    UVA 12657 Boxes in a Line
  • 原文地址:https://www.cnblogs.com/leeSmall/p/7860707.html
Copyright © 2020-2023  润新知