关于Spring与SpringMVC的IOC容器

关于Spring与SpringMVC的IOC容器

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


    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:spring-xxx.xmlparam-value>
    context-param>

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


    
    <servlet>
        <servlet-name>springDispatcherServletservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:xxx-mvc.xmlparam-value>
        init-param>
        
        
        <load-on-startup>1load-on-startup>
    servlet>
    <servlet-mapping>
        
        <servlet-name>springDispatcherServletservlet-name>

		
        <url-pattern>*.htmlurl-pattern>
        <url-pattern>*.jsonurl-pattern>
        <url-pattern>*.dourl-pattern>
            
    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,这是出现异常的根本原因)

关于Spring与SpringMVC的IOC容器_第1张图片

你可能感兴趣的:(SSM)