栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

对Spring IOC控制反转的详细理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对Spring IOC控制反转的详细理解

IOC
  • IOC是什么
    • 问题一:谁控制谁?控制什么
    • 问题二:为何是反转,哪方面反转了
    • DI依赖注入
  • 对象如何生成(BeanFactory和ApplicationContext的区别)
    • BeanFactory和ApplicationContext
  • Bean的生命周期
  • Bean的线程安全
  • Bean的循环依赖

IOC是什么

    Spring的IOC意思为控制反转,它不是什么技术,而是一种设计思想。它是将你设计好的对象交给Spring容器来控制,而不是由我来管理对象,给它赋值等等。

问题一:谁控制谁?控制什么

    传统的面向对象思想对于构造对象最简单的方法无非就是在对象内部通过new对对象进行创建,是程序主动去创建依赖对象。
    但IOC不同,IOC是专门有一个容器来创建、初始化这些对象,这些对象被称为Bean。谁控制谁? 是IOC容器控制住了对象,控制了什么? 控制了bean的生命周期。

问题二:为何是反转,哪方面反转了

    有反转就有正转,面向对象思想就是有我们在自己的对象中主动控制去直接获取依赖对象,这就是正转。而反转就是由Spring容器来创建及注入依赖对象。为何是反转? 因为有容器来自动的帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转。哪方面反转了? 依赖对象的获取被反转了。

DI依赖注入

    IOC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。在生产bean的过程中,需要解决bean之间的依赖问题,才引入了依赖注入(DI)这种技术。也就是说依赖注入是beanFactory生产bean时为了解决bean之间的依赖的一种技术而已。

对象如何生成(BeanFactory和ApplicationContext的区别)

    刚说的IOC就是由Spring来接手对象的创建、生命周期和对象间的关系。

    Spring的本质就是一个bean工厂或者说bean容器,它按照我们的需求创作出各种各样的bean。
    beanFactory会在bean的生命周期的各个阶段中对bean进行各种管理,并且spring将这些阶段通过各种接口暴露给我们,让我们可以对bean进行各种处理,我们只要让bean实现对应的接口,那么spring就会在bean的生命周期调用我们实现的接口来处理该bean。

BeanFactory和ApplicationContext

    在 spring 容器中,BeanFactory 接口是 IOC 容器要实现的最基础的接口,定义 了管理 bean 的最基本的方法。主要是面向spring框架本身,不支持AOP和web功能. 在获取bean时才会创建bean 。ApplicationContext 继承BeanFactory接口,对功能进行扩展. 支持aop,web等插件,面向开发层面, 可以在框架启动时,就可以创建bean。如果说BeanFactory是心脏,那么ApplicationContext就是躯体。

Bean的生命周期

IOC控制了Bean的生命周期,就是Spring管理Bean的过程,

  1. 实例化,等同于new
  2. 属性赋值、注入
  3. 初始化,根据各种配置进行对象初始化。例如类具有事务管理功能,再次阶段生成代理对象。
  4. Bean的销毁阶段
Bean的线程安全

Spring中的Bean不是线程安全的

    线程安全问题,还需要从单例bean和原型bean说起
    线程安全问题是指在单咯bean的情况下,对象值创建了一个。如果拥有成员变量,它是共享的,所以线程不安全,可以使用ThreadLocal为每个线程申请一个变量副本,来解决线程安全问题。这种情况是单例Bean。在单例的设计模式中,对象只创建一次,多线程共享一个Bean对象,存在并发编程问题。而原型Bean是没有线程安全问题的,因为每个线程申请进来都会创建一个Bean对象,他们之间不存在成员变量共享问题。

Bean的循环依赖

什么是循环依赖?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/961576.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号