Spring IOC原理

发布时间:2024年01月15日

Spring IOC即“控制反转”,是一种设计思想。将对象的创建和对象之间依赖关系的维护交给容器来负责,以实现对象与对象之间松耦合的目的。

Spring IOC概述

Spring通过配置文件或者注解来描述Bean和Bean之间的依赖关系,利用Java的反射功能实例化Bean之间的依赖关系。Spring的IOC容器在完成这些底层工作的基础上,还提供了Bean实例缓存管理、Bean生命周期管理、Bean实例代理、事件发布和资源装载等高级服务。

Spring Bean的装配过程

Spring在启动时会从XML配置文件或注解中读取应用程序提供的Bean配置信息,并在Spring Bean容器中生成一份相应的Bean配置注册表;然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系,并将Bean实例载入Bean缓存池中,为上层服务提供基础的运行环境。其中Bean缓存池采用HashMap实现。

Spring Bean的作用域

Spring为Bean定义了5种作用域,分别为Singleton(单例)、Prototype(原型)、Request(请求级别)、Session(会话级别)和Global Session(全局会话)
Singleton:Singleton是单例模式,当实例类型为单例模式时,在Spring IOC容器种只会存在一个共享的Bean实例,无论有多少个Bean引用它,都始终指向同一个Bean对象。该模式在多线程下是不安全的。Singleton作用域是Spring中的默认作用域。
Prototype:Prototype是原型模式,每次通过Spring容器获取Prototype定义的Bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,而Singleton全局只有一个对象。因此,对有状态的Bean经常使用Prototype作用域,而对无状态的Bean则使用Singleton作用域。
Request:Request指在一次HTTP请求中容器会返回该Bean的同一个实例,对不同的HTTP请求则会创建新的Bean实例,并且该Bean实例仅在当前HTTP请求内有效,在当前HTTP请求结束后,该Bean实例也将随之销毁。
Session:Session指在一次HTTP Session中,容器会返回该Bean的同一个实例,对不同的Session请求则会创建新的Bean实例,该Bean实例仅在当前的Session内有效。
与request作用域一样,你可以根据需要放心的更改所创建实例的内部状态,而别的HTTP Session中的Bean实例, 将不会看到这些特定于某个HTTP Session的状态变化。 当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。
Global Session:Global Session指在一个全局的HTTP Session中容器会返回该Bean的同一个实例,且仅在使用Protlet Context时有效。

文章来源:https://blog.csdn.net/weixin_44145526/article/details/135599131
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。