博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring容器和springmvc容器,以及web容器的关系
阅读量:5878 次
发布时间:2019-06-19

本文共 2028 字,大约阅读时间需要 6 分钟。

  说到spring和springmvc,其实有很多工作好多年的人也分不清他们有什么区别,如果你问他项目里用的什么MVC技术,他会说我们用的spring和mybatis,或者spring和hibernate。

在潜意识里会认为springmvc就是spring,之前我也是这么认为的,哈哈。 

  虽然springMVC和spring有必然的联系,但是他们的区别也是有的。下面我就简单描述下

  首先 springmvc和spring它俩都是容器,容器就是管理对象的地方,例如Tomcat,就是管理servlet对象的,而springMVC容器和spring容器,就是管理bean对象的地方,再说的直白点,springmvc就是管理controller对象的容器,spring就是管理service和dao的容器,这下你明白了吧。所以我们在springmvc的配置文件里配置的扫描路径就是controller的路径,而spring的配置文件里自然配的就是service和dao的路径

  spring-mvc.xml

  applicationContext-service.xml

或者

 

  至于他是怎么管理起来的,又是怎么注入属性的,这就涉及到他们底层的实现技术了

  其次, spring容器和springmvc容器的关系是父子容器的关系。spring容器是父容器,springmvc是子容器。在子容器里可以访问父容器里的对象,但是在父容器里不可以访问子容器的对象,说的通俗点就是,在controller里可以访问service对象,但是在service里不可以访问controller对象

  所以这么看的话,所有的bean,都是被spring或者springmvc容器管理的,他们可以直接注入。然后springMVC的拦截器也是springmvc容器管理的,所以在springmvc的拦截器里,可以直接注入bean对象。

 

  而web容器又是什么鬼,
  web容器是管理servlet,以及监听器(Listener)和过滤器(Filter)的。这些都是在web容器的掌控范围里。但他们不在spring和springmvc的掌控范围里。因此,我们无法在这些类中直接使用Spring注解的方式来注入我们需要的对象,是无效的,
web容器是无法识别的。

  但我们有时候又确实会有这样的需求,比如在容器启动的时候,做一些验证或者初始化操作,这时可能会在监听器里用到bean对象;又或者需要定义一个过滤器做一些拦截操作,也可能会用到bean对象。

那么在这些地方怎么获取spring的bean对象呢?下面我提供两个方法:

1、

public void contextInitialized(ServletContextEvent sce) {  ApplicationContext context = (ApplicationContext) sce.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);   UserService userService = (UserService) context.getBean("userService");}

 

2、

public void contextInitialized(ServletContextEvent sce) {  WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());   UserService userService = (UserService) webApplicationContext.getBean("userService"); }

  注意:以上代码有一个前提,那就是servlet容器在实例化ConfigListener并调用其方法之前,要确保spring容器已经初始化完毕!而spring容器的初始化也是由Listener(ContextLoaderListener)完成,因此只需在web.xml中先配置初始化spring容器的Listener,然后在配置自己的Listener。

转载于:https://www.cnblogs.com/xiexin2015/p/9023239.html

你可能感兴趣的文章
CentOS 6.5 安装部署zabbix(Agent客户端篇)
查看>>
(转)服务器time_wait和close_wait处理
查看>>
第4章:介绍python对象类型/4.1 python的核心数据类型/4.5 元组以及文件操作
查看>>
决心书
查看>>
软件安装
查看>>
IP-guard文档加密系统软件典型应用
查看>>
网络工程师成长日记143-自知之明去哪了
查看>>
交换路由实现全网互通
查看>>
思科路由器密码破解
查看>>
Linux学习— /etc/fstab文件详解
查看>>
国家危废目录
查看>>
Redis二进制安装
查看>>
最好用的工兵铲—MaxCompute Studio,来了解下!
查看>>
MySQL数据库的备份与恢复
查看>>
CentOS 7 实现Nginx+Tomcat 负载均衡
查看>>
openstack 调试
查看>>
tcpdump抓包分析,快速完成接口调试
查看>>
语音转文字软件哪个好,这三款值得收藏
查看>>
我,而立之年,苦逼的一比!
查看>>
一分钟带你走进大数据行业!2019年进军大数据我们要做些什么?
查看>>