IOC容器(底层原理解读)

IOC的概念和原理

目录

IOC的概念和原理

1.什么是IOC

(1)控制反转:

(2)使用IOC的目的:降低耦合度

(3)IOC解耦过程图解

2.IOC的底层原理

3.IOC接口

(1)IOC思想

(2)Spring提供IOC容器实现两种方式:(两个接口)

4.ApplicationContext 接口的实现类

两个实现类的区别



1.什么是IOC

(1)控制反转:

IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想

控制:IOC意味着将你设计好的对象交给IOC容器控制,而不是传统的在你的对象内部直接控制;

           IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建;

           谁控制谁?当然是IOC容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

反转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;

           反转则是由IOC容器来帮忙创建及注入依赖对象;

           由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

IOC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。

传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;

有了IOC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

其实 IOC 对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在 IOC/DI 思想中,应用程序就变成被动的了,被动的等待 IOC 容器来创建并注入它所需要的资源了。

 

示例图:

                                                          

(2)使用IOC的目的:降低耦合度

用伪代码来比较:用工厂类来做例子(注意:工厂类不是IOC模式)

 

原始方式:一个类调用另外一个类的对象使用

 

升级后:工厂模式解耦,但是也不是完全解耦 

 

(3)IOC解耦过程图解

可能一时半会看不懂图,但是通过后面深入理解就会豁然开朗

IOC的思想就是我们仅仅通过修改XML配置文件的对象路径,就可以轻松把对象创建出来去被别的类进行调用

 

2.IOC的底层原理

(1)xml解析、工厂模式、反射

3.IOC接口

(1)IOC思想

         基于IOC容器完成,IOC容器底层就是对象工厂

(2)Spring提供IOC容器实现两种方式:(两个接口)

 

第一种: BeanFactory ,可以对IOC容器基本实现,是Spring 内部的使用接口,不提供开发人员进行使用

【加载配置文件的时候不会创建对象,在获取对象(也就是说在使用的时候)才会去创建对象】

 

第二种:ApplicationContext,是BeanFactory 接口的子接口,提供更多强大的功能,一般由开发人员使用

【加载配置文件的时候会把在配置文件中的对象进行创建】

*一般推荐使用第二种,因为Spring框架,要结合web项目进行操作,通俗点来说就是用tomcat服务器进行启动,因此把这些耗时耗内存的都在项目启动的时候进行处理更加合适

 

操作步骤:将ApplicationContext 改为 BeanFactory 【实验结果不变】

 

4.ApplicationContext 接口的实现类

查看的操作步骤如图:

打开实现类

两个实现类的区别

一个读取类路径下,绝对路径

一个读取文件路径,相对路径

 

 

 

 

 

 

 

 

 

  • 15
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring IOC(Inversion of Control)是Spring框架的核心功能之一,它实现了控制反转(IoC)的设计模式。底层原理主要包括以下几个方面: 1. Bean的定义和注册:Spring IOC容器通过读取配置文件或注解来定义和注册Bean。配置文件可以是XML、JavaConfig或注解方式。在配置文件中,我们可以定义Bean的属性、依赖关系和作用域等信息。 2. Bean的实例化和依赖注入:Spring IOC容器负责实例化Bean并管理它们的生命周期。当需要使用Bean时,容器会根据配置信息创建Bean的实例,并将依赖关系注入到Bean中。依赖注入可以通过构造函数、Setter方法或字段注入的方式进行。 3. Bean的生命周期管理:Spring IOC容器负责管理Bean的生命周期,包括初始化和销毁。容器在实例化Bean后会调用其初始化方法,并在容器关闭时销毁Bean。我们可以通过实现InitializingBean和DisposableBean接口,或使用@PostConstruct和@PreDestroy注解来定义初始化和销毁方法。 4. AOP(Aspect-Oriented Programming)的支持:Spring IOC容器还提供了AOP的支持,可以通过配置文件或注解来定义切面、切点和通知等概念,实现对应用程序的横向关注点的解耦。在运行时,容器通过动态代理技术将切面织入到目标对象中。 总的来说,Spring IOC底层原理是通过容器管理Bean的生命周期,实现对象之间的解耦和依赖注入,使应用程序更加灵活、可维护和可扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值