springmvc中为什么需要用父子容器?
springmvc中为什么需要用父子容器?1.什么是父子容器?父子容器特点父容器和子容器是相互隔离的,他们内部可以存在名称相同的bean子容器可以访问父容器中的bean,而父容器不能访问子容器中的bean调用子容器的getBean方法获取bean的时候,会沿着当前容器开始向上面的容器进行查找,直到找到对应的bean为止子容器中可以通过任何注入方式注入父容器中的bean,而父容器中是无法...
springmvc中为什么需要用父子容器?
1.什么是父子容器?
父子容器特点
父容器和子容器是相互隔离的,他们内部可以存在名称相同的bean
子容器可以访问父容器中的bean,而父容器不能访问子容器中的bean
调用子容器的getBean方法获取bean的时候,会沿着当前容器开始向上面的容器进行查找,直到找到对应的bean为止
子容器中可以通过任何注入方式注入父容器中的bean,而父容器中是无法注入子容器中的bean,原因是第2点
2.为什么需要用父子容器?
通常我们使用springmvc的时候,采用3层结构,controller层,service层,dao层;父容器中会包含dao层和service层,而子容器中包含的只有controller层;这2个容器组成了父子容器的关系,controller层通常会注入service层的bean。
采用父子容器可以避免有些人在service层去注入controller层的bean,导致整个依赖层次是比较混乱的。
父容器和子容器的需求也是不一样的,比如父容器中需要有事务的支持,会注入一些支持事务的扩展组件,而子容器中controller完全用不到这些,对这些并不关心,子容器中需要注入一下springmvc相关的bean,而这些bean父容器中同样是不会用到的,也是不关心一些东西,将这些相互不关心的东西隔开,可以有效的避免一些不必要的错误,而父子容器加载的速度也会快一些。
3.父子容器如何使用?
父容器:parentFactory,内部定义了一个String类型的bean:userName->~~
子容器:childFactory,内部也定义了一个String类型的bean:address->~~
@1:调用子容器的getBean方法,获取名称为userName的bean,userName这个bean是在父容器中定义的,而getBean方法是BeanFactory接口中定义的,支持容器层次查找,所以getBean是可以找到userName这个bean的
@2:调用子容器的getBeanNamesForType方法,获取所有String类型的bean名称,而getBeanNamesForType方法是ListableBeanFactory接口中定义的,这个接口中方法不支持层次查找,只会在当前容器中查找,所以这个方法只会返回子容器的address
更多推荐
所有评论(0)