请解释SpringMVC中的父子容器是什么,并说明它们之间的关系和作用。
考察说明
考察对SpringMVC容器体系结构的理解,包括父子容器的职责划分和相互关系。
回答思路
- 【回答框架 1】在SpringMVC中,存在两个IoC容器:父容器和子容器。父容器通常由ContextLoaderListener创建,负责加载业务层(如Service、DAO)的Bean;子容器由DispatcherServlet创建,负责加载Web层(如Controller)的Bean。
- 【回答框架 2】子容器可以访问父容器中的Bean,但父容器不能访问子容器中的Bean。这种隔离确保了各层的清晰分离,避免Web层直接依赖业务层实现细节。
- 【回答框架 3】父子容器通过BeanFactory的层级关系实现,子容器在查找Bean时会先查找自身,再向父容器委托。但需要注意,若在子容器中配置了相同名称的Bean,会遮蔽父容器中的定义。
- 【回答框架 4】在配置时,通常通过context-param和servlet-init-param分别指定父容器和子容器的配置文件位置。常见的错误配置包括将Service的Bean配置在子容器中,导致父容器无法引用,或重复创建Bean造成混乱。
- 【关键点 1】父容器负责业务层Bean,子容器负责Web层Bean。
- 【关键点 2】子容器可访问父容器,父容器不可访问子容器。
- 【关键点 3】通过ContextLoaderListener和DispatcherServlet创建父子容器。
- 【关键点 4】避免在子容器重复配置父容器的Bean,以免遮蔽。
- 【易错点 1】混淆父子容器的职责,导致Bean无法注入。
- 【易错点 2】在子容器中配置了父容器已有Bean,造成重复实例。
- 【易错点 3】忽略容器层级关系,直接使用注解扫描导致所有Bean加载在子容器。