在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ 為什么Spring父容器對(duì)SpringMVC子容器中的bean是不可見的,而子容

為什么Spring父容器對(duì)SpringMVC子容器中的bean是不可見的,而子容器對(duì)父容器的中bean卻是可見的

文章截圖來自:Spring-SpringMVC父子容器&AOP使用總結(jié) 鏈接描述

圖片描述

回答
編輯回答
怣人

類似于classloader 類加載

2017年3月20日 07:17
編輯回答
清夢

類似于繼承的思想,父類的方法和屬性孩子可以繼承,可以訪問。但是孩子獨(dú)有的屬性和方法是父親不能訪問的。

一般來說:
父上下文容器中保存數(shù)據(jù)源、服務(wù)層、DAO層、事務(wù)的Bean。
子上下文容器中保存Mvc相關(guān)的controller的Bean。
比如controller需要使用父容器中的服務(wù),存在調(diào)用關(guān)系,所以從設(shè)計(jì)上來說需要能訪問父容器的bean。
父容器中的bean不需要使用子容器的bean,沒有必要設(shè)計(jì)父容器可以訪問子容器的。

如果你是spring中的編寫者,你完全可以設(shè)計(jì)父容器可以訪問子容器,只是這樣做沒有必要,也會(huì)造成混亂。

這個(gè)不需要從代碼分析吧。邏輯很簡單呀。
1.在子容器中找bean,找不到就到父容器中找。
2.在父容器中找bean,找不到就結(jié)束了。

2018年9月22日 16:44
編輯回答
夏夕

首先我們的ssm項(xiàng)目基本都有如下配置文件:
clipboard.png
spring.xml就是父容器配置文件,spring-mvc.xml就是子容器配置文件。
我們可以在spring.xml中配置`<context:component-scan base-package="com.blog.service.impl"/>
`掃描service包。這是屬于spring容器的。
同時(shí)會(huì)在spring-mvc.xml中配置<context:component-scan base-package="com.blog.controller"/> 掃描controller包,這是屬于springmvc容器的。


子容器對(duì)父容器的中bean是可見的
即子容器可以訪問父容器中的bean
所以我們將spring中的配置加入到spring-mvc.xml里:
此時(shí)spring-mvc配置中有
<context:component-scan base-package="com.blog.controller"/>
<context:component-scan base-package="com.blog.service.impl"/>

spring.xml刪掉掃描包的配置。 啟動(dòng)tomcat,訪問,沒問題。


父容器對(duì)子容器的中bean不可見
驗(yàn)證一下,將spring-mvc.xml中掃描Controller的配置`<context:component-scan base-package="com.blog.controller"/>
`放到spring.xml中,啟動(dòng)并訪問,會(huì)提示404,說明spring(父容器)并沒有將sprngmvc(子容器)中的controller bean配置上。

所以實(shí)際應(yīng)用的時(shí)候我們會(huì)在spring-mvc.xml中負(fù)責(zé)所有包的掃描<context:component-scan base-package="com.blog.*"/>,而不是在spring.xml中配置掃描

2018年9月7日 16:15