什么是父子容器
什么是容器
当我们使用spring的时候,我们经常会提到一个概念,IOC容器,IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IOC容器进行组装。在Spring中BeanFactory是IOC容器的实际代表者。
我们还常常看到一个问题,就是“Spring中BeanFactory和ApplicationContext的区别”,从咱们今天要讨论的问题来看,其实他俩都属于IOC容器,可以先简单的理解为ApplicationContext是BeanFactory的扩展版,支持很多它不支持的功能。
所以容器,我们可以先理解为就是程序中管理对象的工厂(Factory)。
如何形成父子关系
而父子容器,其实可以理解为管理不同对象的工厂,但是它们之间,有一个组合的关系,子容器持有父容器的对象引用,因此子容器可以拿到父容器中的对象,相反,父容器不能拿到子容器中的对象,注意,他们之间没有继承/实现的关系。
父子容器的特点
父容器和子容器是相互隔离的,他们内部可以存在名称相同的bean
子容器可以访问父容器中的bean,而父容器不能访问子容器中的bean
调用子容器的getBean方法获取bean的时候,会沿着当前容器开始向上面的容器进行查找,直到找到对应的bean为止
子容器中可以通过任何注入方式注入父容器中的bean,而父容器中是无法注入子容器中的bean,原因是第2点
父子容器的作用
父子容器的主要用途是上下文隔离。可以看到特点中的第一条,父子容器中的bean是可以同名的。