前言

上篇文章【Spring】初识Spring粗略介绍了Spring 的概述和一个S pring5 的入门案例,这篇文章我们来说讲一讲Spring 的两大核心之一的IOC。

同样,感谢B站尚硅谷的相关视频。

什么是IOC

  • IOC就是控制反转,把对象的创建和调用过程交给Spring 来进行管理。
  • 使用IOC的目的:降低耦合

IOC 底层原理

实现方式

  • xml解析
  • 工厂设计模式
  • 反射

画图解析

  • 原始模式
    在没有 IOC 之前,我们想要创建一个对象,需要自己去new一个出来,如下图所示,UserService 想要使用UserDao 中的方法,那么就需要自己new 一个UserDao 的对象出来调用add() 方法。
    image.png
    但是这样会有一个问题————耦合度太高了

  • 工厂模式
    image.png

上图使用工厂模式的设计模式,将UserService 和UserDao 之间的耦合降低了一些,可以通过工厂创建不同的UserDao ,但还不够。如果对工厂设计模式哪里降低耦合的朋友有疑问的朋友可以先了解一些工厂设计模式。

  • IOC
    image.png

IOC 用反射与工厂设计模式相结合的方式,更近一步的降低了耦合。

IOC 的具体实现

  • IOC 的思想是通过IOC 容器来实现的,而IOC 容器其实就是一个对象工厂
  • Spring IOC 实现的两种方式
    • BeanFactory:IOC 容器的基本实现。
    • ApplicationContext:BeanFactory 的子接口,提供了比BeanFactory 更多、更强大的功能。
  • 两种方式的不同点:
    • BeanFactory 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
    • ApplicationContext 加载配置文件时候就会把在配置文件定义的对象进行创建

ApplicationContext

接口实现类

image.png

FileSystemXmlApplicationContext:用于bean.xml文件的绝对文件路径
ClassPathXmlApplicationContext:用于bean.xml文件的相对(src)路径