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. 网易云音乐JS逆向解析歌曲链接

    Request URL:   https://music.163.com/weapi/song/enhance/player/url?csrf_token= FormData : params: BV ...

  2. .net面试--值类型和引用类型

    注:下面的示意图主要是为了辅助理解,不代表内存真实情况. Introduction 类型基础是C#的基础概念,了解类型基础及背后的工作原理更有助于我们在编码的时候明白数据在内存中的分配与传递.C#提供 ...

  3. 基于Vue的单页面应用的Markdown渲染

    之前渲染 Markdown 的时候, 笔者使用的是 mavonEditor 的预览模式, 使用起来比较爽, 只需要引入组件即可, 但是在最近的开发中, 遇到了困难. 主要问题在于作为单页面应用, 站内 ...

  4. 大数据开发-从cogroup的实现来看join是宽依赖还是窄依赖

    前面一篇文章提到大数据开发-Spark Join原理详解,本文从源码角度来看cogroup 的join实现 1.分析下面的代码 import org.apache.spark.rdd.RDD impo ...

  5. history-back

    ;!function(pkg, undefined){ //此声明函数在xback.js文件里有,在app.js里必须再声明一次,不然监听返回事件失败 var STATE = 'x-back'; va ...

  6. Gym 101170F Free Weights(二分)题解

    题意:给出两行,每一行都有n个数组,一共有2 * n个,大小为1~n,每个有两个.现在可以进行操作:拿出一个物品i,然后放到一个空格,花费i.可以任意平移物品,平移没有花费.每一行空间无限.要求你把一 ...

  7. 007.NET5 Log4Net组件使用

    NET 5 Log4Net组件使用 1. Nuget引入程序集:log4net + Microsfot.Extensions.Logging.Log4Net.AspNetCore 2. 准备配置文件 ...

  8. how to share UI components

    how to share UI components The shared component cloud · Bit https://bit.dev/ A better way to build w ...

  9. Bearer Token & OAuth 2.0

    Bearer Token & OAuth 2.0 access token & refresh token http://localhost:8080/#/login HTTP Aut ...

  10. Docker & Node.js

    Docker & Node.js https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ https://docs.docker.com ...