Spring 中的父子容器是咋回事?
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
父子容器在Spring框架中的作用和理解
本文讨论了在SSM项目中Spring容器和SpringMVC容器的父子关系,探讨了为什么需要使用父子容器以及它们的优势。
1. 父子容器的基本概念
在Spring框架中,父子容器是常见的设计模式,类似于Spring Security中的AuthenticationManager。使用父子容器时,如果在父容器中查找Bean,则仅在父容器中查找;而在子容器中查找Bean时,会先在子容器中查找,如果未找到,则继续在父容器中查找。
2. 父子容器的必要性及实现
2.1 问题呈现
父子容器的需要源于多模块项目中可能出现的同名Bean冲突问题。例如,商家模块和客户模块中都有RoleService类,如果在admin模块中同时加载这两个模块,会出现Bean定义冲突。Spring容器默认会覆盖同名的Bean,导致其中一个Bean无法找到。
2.2 父子容器解决方案
可以通过配置消费者和商家模块为父子关系或兄弟关系来解决同名Bean冲突问题。兄弟关系通过分别创建容器并设置共同的父容器来实现,但这种结构下,子容器不能访问兄弟容器的Bean。而父子关系则是通过为子容器设置父容器来实现,子容器可以访问父容器的Bean。
2.3 特殊情况
并不是所有获取Bean的方法都支持父子关系查找。例如,getBeanNamesForType方法只在当前容器中查找Bean,不会去父容器中查找。但Spring提供了BeanFactoryUtils工具类,可以包括祖先容器的Bean查找。
2.4 Spring和SpringMVC的关系
Spring作为父容器,而SpringMVC则是子容器。将业务逻辑相关的Bean放在Spring容器中,而将控制层相关的Bean放在SpringMVC容器中,这样便于管理和理解不同层之间的关系。另外,可以只使用Spring容器,但需要一些额外配置。
3. 小结
本文总结了父子容器的概念,强调了父容器不能访问子容器的Bean,但子容器可以访问父容器的Bean。同时,公告了TienChin视频杀青的消息,该视频采用Spring Boot+Vue3技术栈,并鼓励小伙伴们参与项目。
想要了解更多内容?