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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习极限控制准备之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

相关文章
|
29天前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
29天前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
29天前
|
XML Java 数据格式
Spring5入门到实战------2、IOC容器底层原理
这篇文章深入探讨了Spring5框架中的IOC容器,包括IOC的概念、底层原理、以及BeanFactory接口和ApplicationContext接口的介绍。文章通过图解和实例代码,解释了IOC如何通过工厂模式和反射机制实现对象的创建和管理,以及如何降低代码耦合度,提高开发效率。
Spring5入门到实战------2、IOC容器底层原理
|
1月前
|
C++ 容器
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树
24 5
|
29天前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
30天前
|
Java Spring 容器
建模底层逻辑问题之以Spring IOC容器为例,使用因果法建模,如何操作
建模底层逻辑问题之以Spring IOC容器为例,使用因果法建模,如何操作
|
1月前
|
XML Dubbo Java
Spring之Ioc容器
该文章主要介绍了Spring框架中的IoC(Inversion of Control,控制反转)容器,包括IoC容器的概念、IoC容器在Spring中的实现以及IoC容器的基础包等内容。
Spring之Ioc容器
|
1月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
83 3
|
1月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
19 2
|
1月前
|
关系型数据库 C++ 容器
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树
【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树
24 0