面试必背之Spring和SpringMVC父子容器问题(父子容器污染)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 🍅程序员小王的博客:程序员小王的博客🍅 欢迎点赞 👍 收藏 ⭐留言 📝🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕🍅java自学的学习路线:java自学的学习路线

1、容器

Spring项目管理框架 核心作用:组件的创建,使用,销毁对象


2、父子容器

Spring容器

SpringMVC基于Spring开发的控制器框架 本质:也是容器也能创建,使用,销毁对象


3、两个容器:Spring SpringMVC

SSM:Struts2+Spring+Mybatis只有一个容器

现有的SSM整合Spring+SpringMVC+Mybatis 有两个容器


4、父子容器 就是Spring和SpringMVC的关系

Spring是父容器

SpringMVC是子容器


5、父子容器的特点

父容器中的组件 可以共用,子容器的组件只有自己能用,同时子容器内部组件只有容器可用,而且优先使用自己的组件


6、父子容器污染

  父容器:<context:component-scan base-package="com.tjcu"></context:component-scan>
  子容器: <context:component-scan base-package="com.tjcu"></context:component-scan>

如果父子容器的组件扫码都扫码位置一样就会出现父子容器污染,都会同时创建Controller,Service对象


8.png

问题:

1、父子容器会创建相同的组件,浪费存储资源

2、子容器使用没有添加事务控制的Service实现类 从而丢失数据,额外功能和事务控制


7、解决方案

解决方法的核心:父容器只扫描Dao,Servie,子容器只扫描Controller相关


9.png


方案一:父容器扫码全部,子容器只扫描Controller相关组件

方案二、父子容器都扫描根【企业,开发,面试必背】

通过修改扫描策略来指定各个容器的扫描范围


父容器

  <!--1、注入组件扫码-->
    <context:component-scan base-package="com.tjcu">
        <!--排除过滤 annotation:通过注解过滤 expression:注解的全限定-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>


子容器(use-default-filters:关闭默认扫描策略)

   <!-- 1、开启注解组件 扫码 use-default-filters:关闭默认扫描策略-->
    <!--默认扫描:@Repository, @Service,@Controller, @RestController, @ControllerAdvice-->
    <context:component-scan base-package="com.tjcu" use-default-filters="false">
        <!--包含过滤 Controller层-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
相关文章
|
21天前
|
设计模式 算法 架构师
京东二面:说下spring中常用的设计模式? (一个 深入骨髓的答案, 面试官跪下了)
京东二面:说下spring中常用的设计模式? (一个 深入骨髓的答案, 面试官跪下了)
京东二面:说下spring中常用的设计模式? (一个 深入骨髓的答案, 面试官跪下了)
|
2月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
6月前
|
前端开发 安全 Java
2025春招,Spring 面试题汇总
本文详细整理了2025年春招必备的Spring面试题,分为基础和高级两大部分,帮助求职者全面掌握Spring相关知识点,结合实际项目经验,提升面试成功率。内容涉及Spring框架、AOP、事务管理、数据库集成、Spring Boot、Spring Security、微服务架构等,助力你在春招中脱颖而出。
940 0
|
5月前
|
XML Java 数据格式
Spring容器的本质
本文主要讨论Spring容器最核心的机制,用最少的代码讲清楚Spring容器的本质。
|
7月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
160 6
|
7月前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
7月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
163 2
|
7月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
110 1
|
JSON 数据格式 容器
|
4月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
119 0