1、父子容器关系:
子容器可以调用父容器的对象,但是不能直接调用父容器的属性,可以使用父容器的getter方法调用该属性;
父容器不能调用子容器的对象,也不能直接调用子容器的属性。
2、Spring 与 SpringMVC关系
如上图所示:
Spring 是父容器,SpringMVC是子容器。
Spring 容器中有mapper 代理对象、service对象,
SpringMVC容器中有controller 对象。
SpringMVC 的配置扫描文件中:
<!-- 配置包扫描器 -->
<context:component-scan base-package="com.XXX.controller"></context:component-scan>
只需要扫描@controller注解的对象,即可。因为SpringMVC作为子容器,可以访问Spring父容器的Mapper代理对象和Service对象。
如果将SpringMVC包的扫描器扩大,那么SpringMVC也会扫描Mapper代理对象和Service对象,这样SpringMVC会“就近选择”自己容器的对象,而不会调用父容器的对象。Spring容器会对某些对象进行AOP 或者事物操作的配置,此时子容器中扫描得到的对象失去这些特性。
因此,配置SpringMVC扫描器时,要扫描到controller即可。