springMvc中WebApplicationContext的继承关系

最近在做一个功能的时候遇到了个问题,有点不能理解,具体问题是这样的,有一个bean,id为platform,我明明在xml文件里面注册了,并且也已经检查了这个xml在启动的时候已经被扫到了spring容器里。

而且在controller等地方都可以注入进来。

偏偏在manager里注不进来,有点犯嘀咕,难道是放在两个不同的容器里?但是controller可以正常注入manager中的对象啊。

后来看了下web.xml的配置文件,如下:

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:core/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <description>spring</description>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:core/spring-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

这两个配置,研究了下,使用listener注册的applicationContext.xml与使用servlet注册的spring-servlet.xml是父与子的关系。

也就是说applicationContext.xml中的bean可以注入到spring-servlet.xml中,但是反之spring-servlet.xml中的bean无法注入到applicationContext.xml中。

也就是说父亲的东西集成给了儿子,儿子可以用,而儿子的东西父亲不能用,就是这个道理了。

了解了这个之后,回去检查配置文件,就发现controller的扫描配置和id为platform的bean是写在spring-servlet.xml中的,而manager的扫描配置是写在applicationContext.xml中的。

那么如果我想在controller和manager中都使用这个id为platform的bean怎么办呢?

解决方案就是把id为platform的bean配置到applicationContext.xml中,这样父和子都可以使用了。

有人会问为什么不把controller和manager的扫描都写到spring-servlet.xml中,当然可以,但是我的项目不是很简单的架子,这个controller和manager是分离的,所以扫描注解的时候不是写在一起的,只能说需求不一样。

以上只是举了个简单的例子,可能有漏洞,但基本概念肯定是对的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生(FS)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值