SpringIOC精讲

简介: SpringIOC精讲

何为IOC

所谓的IOC(inversion of control),就是控制反转的意思。何为控制反转?

在传统的程序设计中,应用程序代码通常控制着对象的创建和管理。例如,一个对象需要依赖其他对象,那么它会直接new出来对象。这样的设计通常被称为 "控制流程"。

而在IOC 中,控制关系发生了反转。控制权被转移到Spring容器中,容器负责创建和管理对象,并在需要的时候将它们注入到应用程序中。

所以,原来这个对象的控制权在我们的代码中,我们自己new的对象,在Spring中,应用程序不再控制对象的创建,而是被动地接受由容器注入的对象。

我们拿代码来举个例子:

下面是一个没有IOC的例子

class A {}
class B {
 
    // B需要将A的实例new出来,也就是我们说的控制
    private A a = new A();
 
    public void use() {
        System.out.print(a);
    }
        
}

当有了IOC之后

@Component // 说明A自己控制自己,把自己初始化出来,注入给了容器
class A {}
 
class B {
 
    // B不需要控制a,直接使用。如果A没有把自己注入给容器,B就不能使用
    @Resource
    private A a;
 
    public void use() {
        System.out.print(a);
    }
        
}

也就是说,没有Spring的话,我们要使用的对象,需要我们自己创建,而有了Spring的IOC之后,对象由IOC容器创建并管理,我们只需要在想要使用的时候从容器中获取就行了。

值得说明的是,IOC只是一种思想和理念,可以有不同的实现方式。

IOC的优点

使用IOC,有最少三个好处:

1.使用者不用关心引用bean的实现细节。

譬如对于B b = new A(c,d,e,f);来说,如果B要使用A,那还要把c,d,e,f多个类全都感知一遍,这显然是非常麻烦且不合理的

2.不用创建多个相同的bean导致浪费。

A a1 = new A();
A a2= new A();

如果a1和a2都引用了A,那么a1和a2就可能new 两个A实例,实际上,我们只需要一个就好了。

3.Bean的修改使用方无需感知。

同样是上面的例子,假如说BeanA需要修改,如果没有IOC的话,所有引用到A的其他bean都需要感知这个逻辑,并且做对应的修改。但是如果使用了IOC,其他bean就完全不用感知到

Spring的IOC

对于Spring的IOC来说,它是IOC思想的一种实现方式。在容器启动的时候,它会根据每个bean的要求,将bean注入到SpringContainer中。如果有其他bean需要使用,就直接从容器中获取即可,如下图所示:

补充

IOC是如何实现的?

使用Spring的IOC容器能力,非常简单,如下代码所示:

ApplicationContext context= new AnnotationConfigApplicationContext("cn.wxxlamp.spring.ioc");
Bean bean = context.getBean(Bean.class);
bean.use();

从上面的代码中,我们也能看出来Spring的IOC是如何实现的:

  1. 从配置元数据中获取要DI的业务POJO(这里的配置元数据包括xml,注解,configuration类等)
  2. 将业务POJO形成BeanDefinition注入到Spring Container中
  3. 使用方通过ApplicationContext从Spring Container直接获取即可。如下图所示:

目录
相关文章
|
5月前
|
Java Spring
spring 源码分析——第二篇(ioc 注解方式)
spring 源码分析——第二篇(ioc 注解方式)
56 0
|
5月前
|
XML Java 数据格式
Spring IOC—基于XML配置和管理Bean 万字详解(通俗易懂)
Spring 第二节 IOC—基于XML配置和管理Bean 万字详解!。
540 5
|
5月前
|
Java 开发者 Spring
Spring AOP精讲
Spring AOP精讲
51 0
|
5月前
|
Java
SpringBoot:第六篇 CommandLineRunner
SpringBoot:第六篇 CommandLineRunner
38 0
|
XML Java 数据格式
Spring高手之路13——BeanFactoryPostProcessor与BeanDefinitionRegistryPostProcessor解析
在Spring框架中,BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor是两个重要的后置处理器,它们在容器的启动过程中起到了至关重要的作用。本文深入探讨了这两者的定义、功能、执行时机以及如何在实际项目中使用它们。同时,通过对比分析,为读者揭示了它们与其他后置处理器之间的差异。无论你是初学者还是有一定经验的开发者,都能从中获得深入的理解和启示。
327 2
Spring高手之路13——BeanFactoryPostProcessor与BeanDefinitionRegistryPostProcessor解析
|
XML 设计模式 Java
SSM中Spring中对IOC的认识(第八课)
SSM中Spring中对IOC的认识(第八课)
101 0
|
设计模式 算法 Java
Sprin框架的学习(课时七)SpringAop的学习(一)
Sprin框架的学习(课时七)SpringAop的学习(一)
73 0
|
XML 缓存 安全
Sprin框架的学习(课时七)SpringAop的学习(二)
Sprin框架的学习(课时七)SpringAop的学习(二)
46 0
QGS
|
XML Java 数据格式
手拉手入门Spring6之Ioc注解开发
组件,控制器,业务、仓库 控制器,业务、仓库都是组件的别名 @Component @Controller @Service @Repository
QGS
97 0
|
XML SQL Java
Spring框架从入门到学精(全)
目录前言SpringSpring的优点Spring下载配置IOCIOC的处理过程IOC底层原理IOC接口 前言 轻量级开源的JAVAEE框架 可以解决企业复杂的应用 拥有IOC,AOP两个核心部分 Spring Spring的优点 IOC方便解耦,简便开发 AOP不改变源代码,增加其功能 方便程序测试 方便其他程序的整合 降低API的开发难度 Spring下载配置 下载Spring5 下载GA版本(稳定版本) 下载的网址为:https://repo.spring.io/release/org/spr
159 0
Spring框架从入门到学精(全)
下一篇
无影云桌面