You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.9 KiB
1.9 KiB
一、什么是父子容器
创建Spring容器的时候,可以给当前容器指定一个父容器。用于解决bean冲突问题
父容器特点
- 父容器和子容器是相互隔离的,内部可以存在名称相同的Bean
- 子容器可以访问父容器中的Bean,而父容器不能访问子容器中的Bean
- 调用子容器的getBean方法获取bean的时候,会沿着当前容器开始向上面的容器进行查找,直到找到对应的bean为止
- 子容器中可以通过任何注入方式注入父容器中的bean,而父容器中是无法注入子容器中的bean
创建子容器
父子容器使用注意点
org.springframework.beans.factory.BeanFactory org.springframework.beans.factory.ListableBeanFactory
BeanFactory接口,是spring容器的顶层接口,这个接口中的方法是支持容器嵌套结构查找的,比如我们常用的getBean方法,就是这个接口中定义的,调用getBean方法的时候,会从沿着当前容器向上查找,直到找到满足条件的bean为止。 而ListableBeanFactory这个接口中的方法是不支持容器嵌套结构查找的,可以使用spring提供的BeanFactoryUtils解决
二、常见问题
1.springmvc中只使用一个容器是否可以?
只使用一个容器是可以正常运行的
2.springmvc中为什么需要用到父子容器?
- mvc采用3层架构,其中父容器会包含dao层和service层,而子容器中只有controller层,采用父子容器可以避免有些人在service层注入controller层的Bean,导致依赖层次混乱。
- 父子容器需求不一样,父容器区中需要事务支持,会注入一些支持事务的扩展组件,而子容器中controller不需要。综上,父子容器可以将相互不关心的东西进行隔离,可以有效的避免一些不要的错误,而父子容器加载的速度也会快一些。