[豪の学习笔记] Spring框架学习碎碎念#2

Spring IoC

学习文献:

IoC概念

​ IoC,Inversion of Control,即控制反转,控制指的是对象创建(实例化、管理)的权利,反转指的是控制权交给外部环境(IoC容器)。它是一种思想而非技术实现,描述的是Java开发领域对象的创建及管理的问题

​ 可以理解为类与类之间的依赖通过容器来控制、配置实现;原来类与类之间在编译时即产生了依赖,即new对象时已建立好两者之间的依赖关系,而IoC机制将两者之间的依赖关系通过容器进行控制,通过注解的方式在运行时阶段,动态地将某种依赖注入到类中

​ 例如:现有类A依赖于类B

  • 传统的开发方式:在类A中手动通过new关键字来new一个B的对象出来
  • 使用Ioc思想的开发方式:不通过new关键字来创建对象,而是通过IoC容器(Spring框架)来实例化对象,需要哪个对象则直接可以在IoC容器内取用

IoC原理

​ 主要是通过反射原理实现,设计流程如下:

f4df885f73b8b1839aeff857efc75e0d

​ 根据路径、资源名称等方式,将xml文件、注解类加载到容器中

​ 通过BeanDefinitionReader将对象解析成BeanDefinition实例

​ 创建BeanFactory工厂(注册前后需要添加bean前置、后置处理器)

​ 通过BeanFactory工厂将对象实例化、对象初始化(初始化前后执行前置、后置处理器)

IoC解决了什么问题

​ IoC的思想就是两方之间不相互依赖,由第三方容器来管理相关资源

  • 对象之间的耦合度/依赖程度降低
  • 资源变得更容易管理

​ 例如:现有一个针对User的操作,利用Service和Dao两层结构进行开发

  • 在没有使用IoC思想的情况下,Servcie层想要使用Dao层的具体实现的话,需要通过new关键字在UserServiceImpl中手动new出IUserDao的具体实现类UserDaoImpl

​ 但若开发过程中突然接到新需求,针对IUserDao接口开发出另一个具体实现类,因为Service层依赖了IUserDao的具体实现,所以我们需要修改UserServcieImpl中new的对象。如果有很多地方都引用了IUserDao的具体实现,一旦需要更换IUserDao的实现方式,修改起来会非常麻烦

  • 使用IoC的思想,我们将对象的控制权(创建、管理)交给IoC容器去管理,在使用时直接向IoC容器调用即可

IoC与DI有区别吗

​ IoC是一种设计思想/模式,它将原本在程序中手动创建对象的权力交给第三方,如IoC容器。对于我们常用的Spring框架来说,IoC容器实际上就是个Map(key, value),Map中存放的是各种对象。不过IoC在其他语言中也有应用,并非Spring特有

​ IoC最常见以及最合理的实现方式叫做依赖注入(Dependency Injection,DI)

posted @ 2025-09-01 20:07  SchwarzShu  阅读(4)  评论(0)    收藏  举报