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!

  • 相关阅读:
    Flink实战(七十三):FLINK-SQL使用基础(一)简介(一)入门
    Flink实战(七十二):监控(四)自定义metrics相关指标(二)
    k8s启动
    k8s containerd
    安装containerd
    k8s镜像
    crictl
    Kubernetes: Using containerd 1.1 without Docker
    docker images --digests
    ctr images pull docker.io/library/redis:latest
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8414530.html
Copyright © 2011-2022 走看看