认识SpringIOC容器

简介: 一、SpringFrameWork 二、SpringIOC容器 三、SpringIoc的核心功能

 

一、SpringFrameWork

1.SpringFrameWork与Spring之间的关系

SpringFrameWork是SpringCould、SpringMVC等等技术的基础实现的,而所有的SpringCloud、SpringFrameWork、SpringMVC等等技术组合起来就形成了Spring大家族。

广义:

    1. 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。
    2. 经过十多年的发展,Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目模块)组成的成熟技术,例 Spring Framework,Spring MVCSpringBoot,Spring Cloud, Spring Data Spring Security等, Spring Framework是其他子项目的基础。
    3. 这些子项目涵盖了从企业级应用开发到云计算等各方面的内容,能够帮助开发人员解决软件发展过程中不断产生的各种实际问题,给开发人员带来了更好的开发体验。

    狭义:

      1. 狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。
      2. Spring Framework(Spring 框架)是一个开源的应用程序框架,由 SpringSource 公司开发,最初是为了解决企业级开发中各种常见问题而创建的。它提供了很多功能,例: 依赖注入 (Dependency lnietion)、面向切面编程(AOP)、声明式事务管理(TX)等。其主要目标是使企业级应用程序的开发变得更加简单和快速,并 Spring 框架被广泛应用于 Java 企业开发领域。
      3. Spring 全家桶的其他框架都是以 SpringFramework框架为基础!

      1.2作为一个基础框架,需要认识什么是框架

      框架= jar包与配置文件的组合。

      比如log4j 与dbutil的区别。

      dbutil(数据库简化技术):只是单纯的jar包,只是用其相关的方法,所以其只是一个工具类log4j(日志输出技术):虽然其jar包中只有两个方法,但是它可以配置相关的log4j.propertis来进行对日志输出的内容进行修改,所以这就是一种框架。

      1.3 SpringFrameWork的功能

      SpringFrameWork有四个最重要的功能,分别是Core Container、AOP&Aspect、TX、SpringMVC。

      功能模块 功能介绍
      Core Container 在Spring环境下使用任何功能必须基于IOC容器
      AOP & Aspects 面向切面编程
      TX 声明式事务管理
      Spring MVC 面向Web应用程序的集成功能

      1.4SpringFrameWork的优点

        1. 丰富的生态:Spring Framework有庞大的开源社区支持,提供了多种扩展和插件,如Spring Security、Spring Data等,丰富了开发者的选择和可扩展性。
        2. 模块化设计:Spring Framework采用模块化设计,将功能拆分为独立的模块,开发者可以根据需求选择使用不同的模块,提高了项目的灵活性和可维护性。
        3. 简化Java的开发:Spring Framework提供了依赖注入(DI)和面向切面编程(AOP)等特性,简化了Java应用程序的开发流程,减少了样板代码的编写,提高了开发效率。
        4. 不断创新和发展:Spring Framework持续进行技术创新和发展,引入了新的特性和功能,如响应式编程、函数式编程等,不断满足不同场景下的开发需求,并与时俱进。

        二、SpringIOC容器

        2.1 SpringIOC容器与普通容器的区别

        首先认识什么是普通容器和复杂容器

          • 普通容器:就比如Java类集框架中的集合,只能进行存放和取出功能
          • 复杂容器:可以管理内容之间的联系等一些较为复杂的事务,比如servlet容器,能够接收请求信息并且对请求信息进行操作

          SpringIoc可以管理组件的容器,就是一个复杂容器,不仅能够存储组件,还能够管理组件之间的依赖关系,并且创建和销毁组件等。

          2.2 什么是组件

          组件,就是能够重用的对象

          比如在三层框架中,可以将三层架构拆分成三个组件

          image.gif编辑

          2.3 Spring管理组件有什么优势

            1. 降低组件之间的耦合性:Spring管理组件通过依赖注入(DI)来实现,使得组件之间的依赖关系由容器动态管理,降低了组件之间的紧耦合,提高了代码的可扩展性和灵活性。
            2. 提高了代码的可重用和可维护性:通过将组件的创建和配置交给Spring容器管理,可以在不修改原有代码的情况下,灵活地替换、升级和配置组件,提高了组件的可重用性和可维护性。
            3. 方便了配置和管理:Spring提供了丰富的配置方式,如XML配置、注解配置和Java配置,可以灵活地进行组件的配置和管理,同时Spring容器统一管理组件的生命周期,简化了组件的配置和管理过程。
            4. 交给Spring管理的对象(组件),可以享受到Spring框架的其他功能比如AOP、事务声明等

            2.4 SpringIoc实现的具体接口与实现类

            1.两个具体接口

            接口 功能介绍
            BeanFactory 提供了IOC容器的基本功能,用于管理和获取Bean对象
            ApplicationContext 在BeanFactory基础上提供了更多高级功能,如事件处理、国际化支持等

            两个接口的关系:

              1. BeanFactory是Spring的最基本容器,提供了IoC容器的基本功能,用于管理和获取Bean对象。它是一个工厂模式的实现,负责创建和管理Bean的生命周期及依赖关系。BeanFactory具有延迟加载的特性,只有当需要获取Bean时才会实例化。
              2. ApplicationContext是在BeanFactory的基础上进行扩展得到的,它提供了更多高级功能和特性。ApplicationContext在启动时会预先实例化和初始化所有的Bean对象,将其缓存在容器中,因此可以提供更快的访问速度。除了BeanFactory的功能,ApplicationContext还支持事件处理、国际化支持、资源加载等方面的功能。

              简而言之,BeanFactory提供了配置框架和基本功能,而 ApplicationContext 添加了更多特定于企业的功能ApplicationContext 是 BeanFactory 的完整超集!

              2.5ApplicationContext接口的四个实现类

              类型名 描述
              ClassPathXmlApplicationContext 通过读取类路径下的XML格式的配置文件创建IOC容器对象。适用于将配置文件放在项目的类路径下,如src/main/resources目录下的配置文件。
              FileSystemXmlApplicationContext 通过文件系统路径读取XML格式的配置文件创建IOC容器对象。适用于指定绝对路径或相对路径的配置文件。
              AnnotationConfigApplicationContext 通过读取Java配置类创建IOC容器对象。适用于基于注解的配置方式,不需要使用XML文件进行配置。
              WebApplicationContext 专门为Web应用准备,基于Web环境创建IOC容器对象,并将对象引入存入ServletContext域中。适用于Web项目,可以获取Web相关的上下文信息。

              一个Spring框架只需要选择一种子类实现方式

              以下就是四种实现类的实现方式的条件

                • ClassPathApplicationContext:1.使用XML配置 2.项目的类路径下resource
                • FileSystemApplicationContext:1.使用XML配置2.文件存储到项目外,某个盘符下
                • AnnotationConfigApplicationContext:1.配置文件使用Java类
                • WebApplicationContext:1.web项目对应ioc容器

                2.6 Spring框架的配置方式

                  1. XML配置方式:
                    • 描述:Spring最早的配置方式之一,通过XML文件定义Bean和其依赖关系、作用域等信息,由Spring IOC容器管理Bean之间的依赖关系。
                    • 特点:从Spring框架第一版开始提供支持。
                      1. 注解方式:
                        • 描述:从Spring 2.5版本开始提供支持,使用注解替代XML配置文件中的配置信息。通过在Bean类上使用注解(如@Component、@Service、@Autowired等),将Bean注册到Spring IOC容器中,实现依赖关系的管理。
                        • 特点:简化配置,提高开发效率。
                          1. Java配置类方式:
                            • 描述:从Spring 3.0版本开始提供支持,使用Java类来定义Bean对象、依赖关系和配置信息,取代XML配置文件的方式。通过@Configuration、@Bean等注解实现Bean和依赖关系的配置。
                            • 特点:使用Java代码编写配置,类型安全性高,可利用面向对象的特性进行配置。

                              现在主流的配置:配置类+注解方式(迎合SpringBoot)为主进行注解


                              三、SpringIoc的核心功能

                              Spring的核心功能就两点:SpringIoc(控制反转)和DI(依赖注入)

                              什么是控制反转Ioc(Inversion of controll)

                                     是指将对象的创建和调用控制从应用程序转移到容器中的一种设计原则。在IoC中,应用程序不再直接创建和管理对象,而是由IoC容器负责创建和管理对象,并通过依赖注入的方式将对象的依赖关系注入到应用程序中。

                              image.gif编辑

                              主要特点如下:

                                • 控制权转移:应用程序不再直接控制对象的创建和调用,而是委托给IoC容器进行管理。
                                • 依赖注入:通过依赖注入的方式,将对象的依赖关系注入到应用程序中,解决了对象之间的耦合性,提高了代码的灵活性和可测试性。
                                • 依赖查找:应用程序通过IoC容器来查找需要使用的对象,而不是自己创建对象,减少了代码的依赖关系。

                                什么是依赖注入DI(Dependency inject)

                                创建A、B两个对象,B对象通过setter等方式将对象A传入对象B中

                                image.gif编辑

                                依赖注入(Dependency Injection,DI)是指在组件之间传递依赖关系的过程中,将依赖关系的处理交给容器来完成,从而避免在应用程序代码中硬编码对象之间的依赖关系,实现对象之间的解耦。在Spring框架中,DI可以通过XML配置文件或注解的方式进行实现,并提供了三种形式的依赖注入:

                                  1. 构造函数注入(Constructor Injection):通过在类的构造函数上标注注解或在XML配置文件中配置对应的依赖项,容器在创建对象时会自动将所需的依赖关系作为参数传递给构造函数,完成对象的创建和依赖注入。
                                  2. Setter方法注入(Setter Injection):通过在类的Setter方法上标注注解或在XML配置文件中配置对应的依赖项,容器在创建对象后调用相应的Setter方法并传入所需的依赖对象,完成对象的依赖注入。
                                  3. 接口注入(Interface Injection):通过在类中定义接口类型的成员变量,并在类中实现对应的接口,在XML配置文件中配置对应的依赖项,容器在创建对象后,将依赖对象通过调用接口方法来注入到类中。

                                  总结:

                                  1.知道SpringFrameWork和Spring的关系

                                  2.掌握SpringFrameWork的核心功能

                                  3.掌握SpringIoc的两个接口与四个实现

                                  4.掌握Spring框架配置的三种方式

                                  5.认识Ioc控制反转与DI依赖注入

                                  具体应用:

                                  基于XML实现SpringIoC配置_Alphamilk的博客-CSDN博客

                                  目录
                                  相关文章
                                  |
                                  Java 容器 Spring
                                  Web环境下几种容器与SpringIOC容器
                                  Web环境下几种容器与SpringIOC容器
                                  59 0
                                  |
                                  消息中间件 Java 程序员
                                  对SpringIoc容器的理解
                                  对SpringIoc容器的理解
                                  29 0
                                  |
                                  容器 Java 自动驾驶
                                  java面试题:什么是SpringIOC容器?
                                  java面试题:什么是SpringIOC容器?
                                  java面试题:什么是SpringIOC容器?
                                  |
                                  XML 缓存 Java
                                  SpringIOC容器初始化源码解析(4)—— 手撕Spring容器的刷新逻辑(较硬核)
                                  SpringIOC容器初始化源码解析(4)—— 手撕Spring容器的刷新逻辑(较硬核)
                                  SpringIOC容器初始化源码解析(4)—— 手撕Spring容器的刷新逻辑(较硬核)
                                  |
                                  设计模式 Java 数据库连接
                                  SpringIOC容器初始化源码解析(1)—— PostProcessor
                                  后置处理器PostProcessor BeanDefinitionRegistryPostProcessor BeanFactoryPostProcessor BeanPostProcessor
                                  SpringIOC容器初始化源码解析(1)—— PostProcessor
                                  |
                                  XML 存储 Java
                                  SpringIOC源码解析(4)—— Resource、ResourceLoader、容器之间的微妙关系
                                  Resource家族 EncodedResource AbstractResource WritableResource 根据资源地址自动选择正确的Resource ResourceLoader ResourceLoader 的使用者BeanDefinitionReader 利器的使用者 BeanDefinitionReader体系结构 XmlBeanDefinitionReader
                                  SpringIOC源码解析(4)—— Resource、ResourceLoader、容器之间的微妙关系
                                  |
                                  设计模式 XML 缓存
                                  SpringIOC源码解析(3)—— 高级容器
                                  ApplicationContext家族体系 ApplicationContex继承的接口 ApplicationContext常用容器 传统的基于XML配置的经典容器 目前比较流行的容器(都是基于注解的) 容器的共性 ApplicationContext源码 模板方法设计模式
                                  SpringIOC源码解析(3)—— 高级容器
                                  |
                                  存储 Java 容器
                                  SpringIOC源码解析(2)—— 简单容器
                                  BeanFactory 和 FactoryBean 的区别 BeanFactory源码 BeanFactory家族体系 其他术语
                                  SpringIOC源码解析(2)—— 简单容器
                                  |
                                  Java Spring 容器
                                  SpringIOC容器初始化源码解析(3)—— 事件监听器模式
                                  示例代码 回调函数 Spring的事件驱动模型