极限控制准备之IOC容器结构说明|学习笔记

简介: 快速学习极限控制准备之IOC容器结构说明

开发者学堂课程【Spring Security知识精讲与实战演示(二)极限控制准备之IOC容器结构说明】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/731/detail/13049


极限控制准备之IOC容器结构说明

 

内容介绍

一、 引题

二、 讲解

三、 完整结构图

 

一、引题

先画一张图来说明,IOC容器的一个结构,只有懂了这个结构,这个操作才不至于糊涂。如下图

image.png

 

二、讲解

任何外部工程都有一个最大的容器,叫select contact容器。这个容器应该是外部工程最大的一个容器,只要外部工程启动了自动就会加在这个容器。假如当前外部容器中放入的有spring,这个时候说的spring指的就真的是除了spring IOC之外的spring,严格意义上,spring IOC它都属于spring from work相关功能,假如在这里创建了一个Spring,注意这里边还会有一个叫spring IOC容器。那正常情况下这个容器应该是有spring核心监听器加载,是一个父容器。现在打开web.xml,这里边有一个核心监听器。核心监听器里找到context load listener,context load listener在这里边加载的是spring配置文件,spring配置文件是由核心监听器负责监听加载的,它加载出来这个容器叫IOC的一个父容器,假如就只有一个spring,这个时候就整个外部过程中就只有两个容器,一个最大的容器Servlet Context容器 ,另外一个是在Servlet Context容器内部有一个小的IOC容器,如果现在又在里边添加了另外的功能spring MVC,这里边又有一个IOC容器,这是spring的IOC子容器,或者直接说springIOC子容器,那这个容器有前端控制器交代,继续看配置文件,这边有一个DispatcherServlet,现在这里边还有一个配置文件,也是Servlet配置文件,虽然他Spring对着MVC,但是看约束头明明就是一个spring配置文件,这个配置文件有前端控制器,有他加载,那么加载出来的容器,称之为子容器,这有一个概念,子容器可以访问父容器中的对象。现在IOC的子容器有前端控制器加载,前端控制器加载的是spring mvc配置文件,也就是它加载的都是controller处理器对象,在这里边加载这些对象是可以去调用父容器的对象,父容器这里边加载的时候都是service加载都是DO,可以直接去访问,父容器中的对象可以被子容器调用,子容器中的对象才可以被HTTP请求访问,意思是页面发的请求应该都是Http请求,发送到这边,不管是同步还是异步,不管是get还是post,都是Http请求,除了这些页面,在企业开发中还有一些手机端,比如安卓ios,他们发送的请求都是HTTP请求,HTTP请求可以访问springIOC容器子容器的对象,父容器的对象不能被HTTP请求访问。现在常说spring mvc比srowto要安全,其实主要就是因为MVC内部他有两个容器,这两个容器各司其职,就构成了现在这里边非常安全的一个架构。在这里边,安全能做到service,DO彻底被保护起来,不能被其他外界请求直接访问,而如果想被访问到,那就只能通过MVC处理器去调用,然后让外界访问,这个有点相当于整个servletcontext容器,就像整个地球,spring的父容器就像整个中国,中国里边有开放的港口,比如香港,国外如果想在中国做生意,影响产生一些贸易交易,只能先去香港,不能直接来大陆,大陆想卖东西要拿着东西去香港,这才是一个交易的一个港口,接下来,子容器里边放的对象其实是context对象,父容器里面放的对象其实是service对象和Dao对象,用了service之后其实还有一个spring security配置文件,配置文件一定要被父容器加载,要放到这个父容器中,保护起来,这里边所有的IOC都完全不能放到这个子容器中,会不会出错,首先放到子容器,它不会报错,即便是不写这个核心监听器盯着web.xml,可以将核心监听器完全删掉,把文件(applicationContext.xml)直接引入到MVC中,项目启动也是可以正常运行的,但是这个项目就失去了它的安全性,因为这个时候整个项目所有的对象都放在了子容器,都可以被外界直接访问,项目是毫无安全性可言的。接下来需要在项目中加入权限控制的注解,那么再加这些注解的时候,可以选择加在controller上,那么也可以选择加到servlet上。按理根据刚才的需求,应该放到业务上,这样才能被保护起来,因为放在controller里可以直接访问,如果放User就只能去测Role和User的,因为product,order并没有写service所有的调用,所以现在就只能暂时先放到这个上面来,但是要注意,放哪个上面的都是可以的,只不过是从安全性考虑应该放到业务层。

 

三、完整的容器结构图

如图

image.png

相关文章
|
2月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
5月前
|
存储 C++ 容器
高维结构投影系列(一):波函数与弦:万象的压缩容器
波函数与弦理论看似分属不同领域,实则揭示同一宇宙奥秘:用极简结构承载无限可能。波函数展现态空间的概率压缩,弦振动呈现粒子谱的展开选择。二者皆为高维结构的投影机制——一个映射态空间,一个映射谱空间。现实并非粒子碰撞,而是结构压缩与展开的选定分支。宇宙或是一套“压缩—展开”系统,现实只是可能性之海中被观测选中的片段。
206 0
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
7月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
XML Java 数据格式
Spring5入门到实战------5、IOC容器-Bean管理(三)
这篇文章深入探讨了Spring5框架中IOC容器的高级Bean管理,包括FactoryBean的使用、Bean作用域的设置、Bean生命周期的详细解释以及Bean后置处理器的实现和应用。
Spring5入门到实战------5、IOC容器-Bean管理(三)
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
XML Java 数据格式
Spring5入门到实战------2、IOC容器底层原理
这篇文章深入探讨了Spring5框架中的IOC容器,包括IOC的概念、底层原理、以及BeanFactory接口和ApplicationContext接口的介绍。文章通过图解和实例代码,解释了IOC如何通过工厂模式和反射机制实现对象的创建和管理,以及如何降低代码耦合度,提高开发效率。
Spring5入门到实战------2、IOC容器底层原理
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
796 3
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
272 0