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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 面试必背之Spring和SpringMVC父子容器问题(父子容器污染)

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对象

image.png


问题:


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


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


7、解决方案

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


image.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>
相关文章
|
3月前
|
JSON 前端开发 Java
spring mvc Rest风格
spring mvc Rest风格
31 0
|
22天前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
26天前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
24天前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
1月前
|
JSON 前端开发 Java
Spring MVC返回JSON数据
综上所述,Spring MVC提供了灵活、强大的方式来支持返回JSON数据,从直接使用 `@ResponseBody`及 `@RestController`注解,到通过配置消息转换器和异常处理器,开发人员可以根据具体需求选择合适的实现方式。
79 4
|
1月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
66 3
|
1月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
65 2
|
2月前
|
前端开发 Java 应用服务中间件
我以为我对Spring MVC很了解,直到我遇到了...
所有人都知道Spring MVC是是开发的,却鲜有人知道Spring MVC的理论基础来自于1978 年提出MVC模式的一个老头子,他就是Trygve Mikkjel Heyerdahl Reenskaug,挪威计算机科学家,名誉教授。Trygve Reenskaug的MVC架构思想早期用于图形用户界面(GUI) 的软件设计,他对MVC是这样解释的。MVC 被认为是解决用户控制大型复杂数据集问题的通用解决方案。最困难的部分是为不同的架构组件想出好的名字。模型-视图-编辑器是第一个。
我以为我对Spring MVC很了解,直到我遇到了...
|
2月前
|
前端开发 Java API
Spring Boot 中的 MVC 支持
### Spring Boot 注解摘要 - **@RestController** - **@RequestMapping** - **@PathVariable** - **@RequestParam** - **@RequestBody**
24 2
|
29天前
|
前端开发 Java Spring
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
41 0