关于Spring与SpringMVC的IOC容器

关于Spring与SpringMVC的IOC容器

1.在web.xml中配置Spring的IOC容器

<!--spring配置 — ContextLoaderListener-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-xxx.xml</param-value>
    </context-param>

2.在web.xml中配置SpringMVC的IOC容器

<!-- 配置 SpringMVC 的前端控制器 -->
    <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
    <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:xxx-mvc.xml</param-value>
        </init-param>
        <!-- 让DispatcherServlet在Web应用启动时创建对象、初始化 -->
        <!-- 默认情况:Servlet在第一次请求的时候创建对象、初始化 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <!-- DispatcherServlet映射的URL地址 -->
        <servlet-name>springDispatcherServlet</servlet-name>
<!--    <url-pattern>/</url-pattern>拦截所有请求-->
		<!--    方式二    -->
        <url-pattern>*.html</url-pattern>
        <url-pattern>*.json</url-pattern>
        <url-pattern>*.do</url-pattern>
            <!--
             优点:伪静态效果,给黑客入侵增加难度、有利于SEO优化
             缺点:不符合RESTFUL风格、请求扩展名不匹配时会406错误
            -->
    </servlet-mapping>

servlet:代表的的容器为spring-mvc的子容器,而DispatcherServlet 是前端控制器,该容器专门为前端监听请求的时候所用,就是说当接收到url请求的时候会引用springmvc容器内的对象来处理。

context-param:代表的容器是spring本身的容器,spring-mvc可以理解为一个继承自该容器的子容器,spring容器是最顶层的父类容器,跟java的继承原理一样,子容器能使用父类的对象,但是父容器不能使用子类的对象

小知识点:(在项目中使用到两个IOC容器的小问题

在Spring中引入SpringSecurity框架时,会涉及到一个继承WebSecurityConfigurerAdapter类的类(这个类的主要功能是对资源进行权限限制和权限认证)应注入到Spring的IOC容器中还是SpringMVC的IOC容器中,因为SpringSecurity是对各种url请求进行处理的,所以应当放在SpringMVC容器中。但当web服务启动时,由于引入SpringSecurity框架,服务在启动时 springSecurityFilterChain 要从IOC容器(web服务启动时,首先加载的是Spring的IOC容器)中拿取对应的bean,但是由于这个继承WebSecurityConfigurerAdapter类的类注入在SpringMVC容器中,所以对应于springSecurityFilterChain的bean并不在Spring的IOC容器中,因此会抛出找不到对应bean的异常

解决方案:

​ 1.使项目中只存在一个IOC容器

​ 2.修改源码(源码中只会在Spring的IOC容器中找springSecurityFilterChain对应的bean,这是出现异常的根本原因)

g的IOC容器中找springSecurityFilterChain对应的bean,这是出现异常的根本原因)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值