文章截图来自:Spring-SpringMVC父子容器&AOP使用总结 链接描述
文章截图来自:Spring-SpringMVC父子容器&AOP使用总结
类似于classloader 类加载
类似于继承的思想,父类的方法和属性孩子可以继承,可以访问。但是孩子独有的属性和方法是父亲不能访问的。
一般来说:父上下文容器中保存数据源、服务层、DAO层、事务的Bean。子上下文容器中保存Mvc相关的controller的Bean。比如controller需要使用父容器中的服务,存在调用关系,所以从设计上来说需要能访问父容器的bean。父容器中的bean不需要使用子容器的bean,没有必要设计父容器可以访问子容器的。
如果你是spring中的编写者,你完全可以设计父容器可以访问子容器,只是这样做没有必要,也会造成混乱。
这个不需要从代码分析吧。逻辑很简单呀。1.在子容器中找bean,找不到就到父容器中找。2.在父容器中找bean,找不到就结束了。
首先我们的ssm项目基本都有如下配置文件: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容器的。
spring.xml
spring-mvc.xml
<context:component-scan base-package="com.blog.controller"/>
子容器对父容器的中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中配置扫描
<context:component-scan base-package="com.blog.*"/>
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
类似于classloader 类加载
类似于继承的思想,父类的方法和属性孩子可以继承,可以访问。但是孩子独有的属性和方法是父亲不能访问的。
一般来说:
父上下文容器中保存数据源、服务层、DAO层、事务的Bean。
子上下文容器中保存Mvc相关的controller的Bean。
比如controller需要使用父容器中的服务,存在调用关系,所以从设计上来说需要能访问父容器的bean。
父容器中的bean不需要使用子容器的bean,没有必要设计父容器可以访问子容器的。
如果你是spring中的编写者,你完全可以设计父容器可以访问子容器,只是这样做没有必要,也会造成混乱。
这个不需要从代码分析吧。逻辑很简单呀。
1.在子容器中找bean,找不到就到父容器中找。
2.在父容器中找bean,找不到就结束了。
首先我们的ssm项目基本都有如下配置文件:
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容器的。spring.xml删掉扫描包的配置。 启动tomcat,访问,没问题。
所以实际应用的时候我们会在spring-mvc.xml中负责所有包的扫描
<context:component-scan base-package="com.blog.*"/>
,而不是在spring.xml中配置扫描