zoukankan      html  css  js  c++  java
  • JavaEE——SpringMVC(13)--SpringMVC运行流程 在 Spring 的环境下使用 SpringMVC

    需要进行 Spring 整合 SpringMVC 吗 ?
    还是否需要再加入 Spring 的 IOC 容器 ?
    是否需要再 web.xml 文件中配置启动 Spring IOC 容器的 ContextLoaderListener ?
    spring的IOC

    package com.atguigu.springmvc;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
    
    	@Autowired
    	private HelloWorld helloWorld;
    	
    	public UserService() {
    		System.out.println("UserService Constructor...");
    	}
    	
    }
    

      

    SpringMVC的IOC

    package com.atguigu.springmvc;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class HelloWorld {
    
    	@Autowired
    	private UserService userService;
    	
    	public HelloWorld() {
    		System.out.println("HelloWorld Constructor...");
    	}
    	
    	@RequestMapping("/helloworld")
    	public String hello(){
    		System.out.println("success");
    		System.out.println(userService);
    		return "success";
    	}
    	
    }
    

      

    1. 需要: 通常情况下, 类似于数据源, 事务, 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中).
    实际上放入 Spring 配置文件对应的 IOC 容器中的还有 Service 和 Dao.
    2. 不需要: 都放在 SpringMVC 的配置文件中. 也可以分多个 Spring 的配置文件, 然后使用 import 节点导入其他的配置文件

    问题: 若 Spring 的 IOC 容器和 SpringMVC 的 IOC 容器扫描的包有重合的部分, 就会导致有的 bean 会被创建 2 次.
    解决:
      1. 使 Spring 的 IOC 容器扫描的包和 SpringMVC 的 IOC 容器扫描的包没有重合的部分.
      *2. 使用 exclude-filter 和 include-filter 子节点来规定只能扫描的注解

    springmvc.xml

    <context:component-scan base-package="com.atguigu.springmvc" 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>
    

      

    bean.xml

    <context:component-scan base-package="com.atguigu.springmvc">
    		<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>
    

      

    SpringMVC 的 IOC 容器中的 bean 可以来引用 Spring IOC 容器中的 bean.
    返回来呢 ? 反之则不行. Spring IOC 容器中的 bean 却不能来引用 SpringMVC IOC 容器中的 bean!

  • 相关阅读:
    fiddler抓取APP请求
    Docker解决没有vi、vim等命令
    postgresql数据库导入导出
    DockerFile简介以及使用
    Docker-容器数据卷
    Docker-commit镜像提交
    Spring Beans自动装配
    Spring Bean几种注入方式——setter(常用),构造器,注入内部Bean,注入集合,接口...
    Spring Bean的生命周期
    Spring IoC容器的初始化和依赖注入
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8414530.html
Copyright © 2011-2022 走看看