美文网首页
Spring IOC/DI详解

Spring IOC/DI详解

作者: Tiger_Lam | 来源:发表于2021-10-10 18:59 被阅读0次

1. IoC理论的背景

我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。


image.png
image.png
耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”,目前这个理论已经被成功地应用到实践当中,很多的J2EE项目均采用了IOC框架产品Spring。

2. 什么是控制反转(IoC)

image.png
由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。

3.Spring如何解决循环依赖问题

循环依赖问题就是A->B->A,spring在创建A的时候,发现需要依赖B,因为去创建B实例,发现B又依赖于A,又去创建A,因为形成一个闭环,无法停止下来就可能会导致cpu计算飙升


image.png
image.png
image.png image.png
image.png
  • spring解决这个问题主要靠巧妙的三层缓存,所谓的缓存主要是指这三个map,singletonObjects主要存放的是单例对象,属于第一级缓存,用于保存实例化、注入、初始化完成的bean实例;
  • earlySingletonObjects属于第二级缓存,如何理解early这个标识呢?它表示只是经过了实例化尚未初始化的对象,用于保存实例化完成的bean实例。
  • singletonFactories属于单例工厂对象,属于第三级缓存,用于保存bean创建工厂,以便于后面扩展有机会创建代理对象;
@Service
public class TestService1 {

    @Autowired
    private TestService2 testService2;

    public void test1() {
    }
}

@Service
public class TestService2 {

    @Autowired
    private TestService1 testService1;

    public void test2() {
    }
}

image.png

相关文章

  • Spring IOC/DI详解

    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对...

  • spring 那点事

    Spring核心功能 DI(IOC) 何谓DI(IOC) DI(依赖注入)是spring的核心功能之一。Depen...

  • spring

    spring4介绍 spring配置详解 IOC(控制反转) 与 DI(依赖注入)重点 依赖注入各种类型const...

  • “王大锤の非诚勿扰” —— Spring IoC / DI 思想

    本文参考地址: 《spring Ioc/DI的理解》 《关于Spring IOC (DI-依赖注入)你需要知道的...

  • 细说Spring——IoC详解(XML配置一)

    在我们经过了: 细说Spring——IoC详解(一) 细说Spring——IoC详解(二) 细说Spring——I...

  • spring 官网 ioc- 1

    spring ioc container 只是转载bean的容器, IoC , DI, DI的方式 throug...

  • spring IOC&DI

    spring IOC&DI spring IOC IOC用处:解耦,降低程序间的依赖关系。 spring搭建基于x...

  • Spring2-Spring IoC容器和bean

    Spring IoC容器和bean Spring IoC容器 IoC也称为依赖注入(DI),可以帮我们创建对象 管...

  • @Autowired 和 @Resource 注解

    Spring 利用依赖注入(DI), 为 Spring IoC 容器赋值。@Autowired 是 Spring ...

  • 初见spring

    框架 spring IOC AOP 配置文件 IOC/DI 依赖注入(Dependecy Injection) ...

网友评论

      本文标题:Spring IOC/DI详解

      本文链接:https://www.haomeiwen.com/subject/uycfoltx.html