为什么Spring父容器对SpringMVC子容器中的bean是不可见的,而子容器对父容器的中bean却是可见的

发布于 2022-09-07 20:50:33 字数 256 浏览 17 评论 0

文章截图来自:Spring-SpringMVC父子容器&AOP使用总结 链接描述

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

明媚如初 2022-09-14 20:50:33

类似于classloader 类加载

怪我闹别瞎闹 2022-09-14 20:50:33

类似于继承的思想,父类的方法和属性孩子可以继承,可以访问。但是孩子独有的属性和方法是父亲不能访问的。

一般来说:
父上下文容器中保存数据源、服务层、DAO层、事务的Bean。
子上下文容器中保存Mvc相关的controller的Bean。
比如controller需要使用父容器中的服务,存在调用关系,所以从设计上来说需要能访问父容器的bean。
父容器中的bean不需要使用子容器的bean,没有必要设计父容器可以访问子容器的。

如果你是spring中的编写者,你完全可以设计父容器可以访问子容器,只是这样做没有必要,也会造成混乱。

这个不需要从代码分析吧。逻辑很简单呀。
1.在子容器中找bean,找不到就到父容器中找。
2.在父容器中找bean,找不到就结束了。

彼岸花ソ最美的依靠 2022-09-14 20:50:33

首先我们的ssm项目基本都有如下配置文件:
clipboard.png
spring.xml就是父容器配置文件,spring-mvc.xml就是子容器配置文件。
我们可以在spring.xml中配置`<context:component-scan base-package="com.blog.service.impl"/>
`扫描service包。这是属于spring容器的。
同时会在spring-mvc.xml中配置<context:component-scan base-package="com.blog.controller"/> 扫描controller包,这是属于springmvc容器的。


子容器对父容器的中bean是可见的
即子容器可以访问父容器中的bean
所以我们将spring中的配置加入到spring-mvc.xml里:
此时spring-mvc配置中有

<context:component-scan base-package="com.blog.controller"/>
<context:component-scan base-package="com.blog.service.impl"/>

spring.xml删掉扫描包的配置。 启动tomcat,访问,没问题。


父容器对子容器的中bean不可见
验证一下,将spring-mvc.xml中扫描Controller的配置`<context:component-scan base-package="com.blog.controller"/>
`放到spring.xml中,启动并访问,会提示404,说明spring(父容器)并没有将sprngmvc(子容器)中的controller bean配置上。


所以实际应用的时候我们会在spring-mvc.xml中负责所有包的扫描<context:component-scan base-package="com.blog.*"/>,而不是在spring.xml中配置扫描

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文