ContextLoaderListener的作用以及Spring和JavaWeb或SpringMVC的整合问题

本文探讨了在Spring整合JavaWeb时遇到的问题,如Servlet无法使用@Controller注解,以及如何通过ContextLoaderListener解决初始化和销毁容器的问题。在SpringMVC的整合中,建议使用分容器策略,确保Spring管理业务逻辑组件,SpringMVC管理控制器组件,以避免组件重复和事务控制失效。同时,文章提到了父子容器的概念,说明了子容器可以引用父容器的组件,但反之则不行。
摘要由CSDN通过智能技术生成

一、背景

1、Spring整合Javaweb的时候,在Servlet类上,不能使用@Cotroller属性。
因为javaweb项目在Tomcat容器启动的时候会自动加载Servlet对象,此时若加上@Controller,ioc容器一启动,也存在了Servlet对象。而Tomcat中的Servlet对象和IOC容器中的Servlet对象不同,在Tomcat中当然是使用Tomcat创建的Servlet对象。因此目前不能标注Spring注解在servlet层;其他层可以标注
在这里插入图片描述

在这里插入图片描述
2、既然如此,不在Servlet类中标注@Controller注解,就不能使用IOC容器提供的强大功能,@Autowired也会失效,该怎么解决?
于是乎,在工具类WebUtils中使用静态方法初始化ioc容器,并写一个getBean方法,每次,Servlet要调用IOC容器中的某个对象的话,通过WebUtils的getBean方法即可调,此时就可以享受IOC容器中对象的强大功能(事务控制等等)
在这里插入图片描述

3、在需要的Servlet类上调用WebUtils的getBean方法,这样子每次请求过来调用Servlet类,Servlet类会调用WebUtils类,这样子在WebUtils中声明的ioc容器也跟着初始化完成。Servlet类就可以调用ioc容器中强大的对象了。
在这里插入图片描述
4、但是这样子处理存在很多问题,每次ioc容器的初始化,并没有销毁,还有多线程等其他各种问题。于是乎,Spring早考虑到这一点,在spring-web包提供了一个ContextLoaderListener来解决这个问题。这个监听器负责ioc容器的初始化销毁各种问题等工作。

<!-- needed for ContextLoaderListener -->
    <context-param>
        <param-name>contextConfigLocation
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值