1. 什么是IOC IOC的好处

IOC的思想是将需要的对象通过外部传入进来,而不是自己创建。这样的设计方式更加灵活。在Spring中对象之间的依赖关系也是由IOC容器来维护(类与类之间的依赖关系,使用与被使用)。

IOC的设计也是根据设计模式原则中依赖倒置原则。

IOC 控制反转。通过DI依赖注入可以实现控制反转。IOC与DI的关系如下图所示。

DL 依赖查找,已经被抛弃。实现思路大概为将service放在map中,然后从map中通过service名字作为key获取指定的service。

2. Spring 框架中是如何做IOC的

Spring通过控制反转容器管理bean的生命周期,控制bean的依赖注入。Spring的IOC容器避免在各处使用new来创建类,并且统一维护。在你需要一个实例时,由容器提供给你。

Spring IOC 容器工作流如下图所示。

Spring源码分析IOC :

Spring IOC 核心:依赖注入和自动装配

核心接口:BeanFactory 和 ApplicationContext

BeanFactory : 能够管理和装配Bean,获取Bean实例

BeanDefinition: 用于描述Bean的定义

BeanDefinitionRegistry: 提供向ioc容器注册BeanDefinition对象的方法(registerBeanDefinition)。注册到BeanDefinitionMap中(key:String的BeanName value:BeanDefinition)。

ApplicationContext:BeanFactory子接口。面向开发者使用,有更多的功能。继承BeanFactory,也能管理装配Bean。RousorcePatternResolver能够加载资源文件。

3. Spring 有什么缺点

Spring像一个胶水,将框架黏在一起,后面拆分的话就不容易拆分了。

Spring 和Spring MVC的区别

Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。Spring 作为胶水 连接Mybatis 和Spring MVC 构成SSM框架。

早期的SSH框架:Struts2 : Web层框架。Spring : 容器框架。

Hibernate : 持久层框架。

4. Spring Bean 的五种作用域

  1. singleton:Spring的默认作用域 容器里拥有唯一实例(针对无状态的Bean)
  2. prototype: 针对每个getBean请求,容器都会创建一个实例(针对有状态的Bean)

web 容器下

3. ruquest:会为每一个Http请求创建一个Bean实例

4. session:会为每个session创建一个Bean实例

5. globalSession:会为每个全局Http Session创建一个Bean实例,该作用域仅对Portlet有效。

global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。

5. Spring Bean 的生命周期

由Spring容器来管理的,主要是 创建 ,销毁。

创建:

  1. 实例化Bean

    • BeanFactory 通过createBean 进行实例化一个未初始化的Bean
  2. 设置对象属性(依赖注入)
    • 实例化后的对象被封装在BeanWrapper对象中,并且此时对象仍然是一个原生的状态,并没有进行依赖注入。
    • 紧接着,Spring根据BeanDefinition中的信息进行依赖注入。
    • 并且通过BeanWrapper提供的设置属性的接口完成依赖注入。
  3. 注入Aware接口
    • Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean。aware接口声明了依赖关系
  4. BeanPostProcessor
    • 当经过上述几个步骤后,bean对象已经被正确构造,但如果你想要对象被使用前再进行一些自定义的处理,就可以通过BeanPostProcessor接口实现。
  5. InitializingBean与init-method
    • 当BeanPostProcessor的前置处理完成后就会进入本阶段。

销毁:

若实现了DisposableBean接口,则会调用destroy方法

若配置了destroy-method属性,则会调用其配置的销毁方法

Spring 的 IOC的更多相关文章

  1. Spring的IOC和AOP之深剖

    今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...

  2. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  3. Spring总结—— IOC 和 Bean 的总结

    一.Spring 官方文档中给出的 Spring 的整体结构. 二.我自己所理解的 Spring 整体结构图. 三.本次总结 Spring 核心部分 1.从上面图中可以看出,Beans 和 Conte ...

  4. spring的IOC和AOP

     spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...

  5. spring容器IOC创建对象<二>

    问题?spring是如何创建对象的?什么时候创建对象?有几种创建方式?测试对象是单例的还是多例的 ?对象的初始化和销毁? 下面的四大模块IOC的内容了!需要深刻理解 SpringIOC定义:把对象的创 ...

  6. Spring中IoC的入门实例

    Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...

  7. Spring中IOC和AOP的详细解释

    我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC就是典型的工厂模式,通过s ...

  8. Spring的IoC应用

    IoC(Inversion of Control,控制反转) Spring的IoC应用是其框架的最大的特点,通过依赖注入可以大大降低代码之间的耦合度,从而实现代码和功能之间的分离.在代码中可以不直接和 ...

  9. Spring 实践 -IoC

    Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...

  10. 挖坟之Spring.NET IOC容器初始化

    因查找ht项目中一个久未解决spring内部异常,翻了一段时间源码.以此文总结springIOC,容器初始化过程. 语言背景是C#.网上有一些基于java的spring源码分析文档,大而乱,乱而不全, ...

随机推荐

  1. Ubuntu上安装Python3编译器和 Pycharm 集成开发环境

    一.安装python3 (Ubuntu上面是自带python编译器的,可以用命令"python -V"来查看版本号.我下面安装的是pyhton3编译器) 一条命令就可以 sudo ...

  2. vlc音视频开发(二)环境搭建(VS篇)

    来源:微信公众号「编程学习基地」 目录 简介 VS配置vlc开发环境 下载vlc源码 创建vlc环境 测试vlc代码 运行vlc程序 完成项目文件获取 简介 VLC 是一款自由.开源的跨平台多媒体播放 ...

  3. Gome 高性能撮合引擎微服务

    Gome 高性能撮合引擎微服务 使用 Golang 做计算,gRPC 做服务,ProtoBuf 做数据交换,RabbitMQ 做队列,Redis 做缓存实现的高性能撮合引擎微服务 依赖 具体依赖信息可 ...

  4. Python_变量作用域与修改

    引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明,特别地,列表.字典等如果只是修改其中元素的值(而不是整体赋值的形式),可以直接使用全局变量,不需要global声明. 参考 ...

  5. HDU2837 Calculation(指数循环节)题解

    题意: 已知\(f(0)=1,f(n)=(n\%10)^{f(n/10)}\),求\(f(n)\mod m\) 思路: 由扩展欧拉定理可知:当\(b>=m\)时,\(a^b\equiv a^{b ...

  6. RT-Thread学习笔记1-启动顺序与线程创建

    目录 1. 启动顺序 2. 堆范围 3. 线程创建 3.1 线程代码(入口函数) 3.2 线程控制块 3.3 线程栈 4. 系统滴答时钟 5. GPIO驱动架构操作IO 6. 线程优先级 & ...

  7. cloud linux cli & dart pub

    cloud linux cli & dart pub https://bcb8313e-05bf-4a93-9309-5f1f68eef1b1.ws-us02.gitpod.io/ https ...

  8. AI & HR

    AI & HR 数字化人才画像 人力资本数字化管理 通过"AI+数据+专家"的手段,将"数字化人才画像"作为服务起点与信息入口,扩展提供全场景的数字化人 ...

  9. OpenCV & Web Assembly & Web Worker

    OpenCV & Web Assembly & Web Worker opencv-in-the-web https://aralroca.com/blog/opencv-in-the ...

  10. Azure 信用卡扣款 1 美元 & Azure 中国客服

    Azure 信用卡扣款 1 美元 & azure 中国客服 Azure 免费帐户常见问题 https://azure.microsoft.com/zh-cn/free/free-account ...