Spring:IOC原理

  1. 什么是IOC
  2. IoC的基本过程
  3. 依赖注入
  4. 几个接口与实现类的关系

什么是IOC

  1. IoC 是 Inversion of Control 的简写,译为“ IoC 容器”,它不是一门技术,而是一种设计思想

  2. Spring 通过 IoC 容器来管理的

  3. IoC 容器管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系

所谓依赖关系是指:现在A对象和B对象,A对象需要使用B对象里面的方法,那么就需要再A里面得到B的对象,如果没有spring,我们需要new这个对象,但有spring之后,它的IOC容器会帮助我们去管理这种关系。(依赖注入

  1. 我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。

IoC的基本过程

  1. 编写xml配置文件,这是bean的定义信息

  2. 有一个接口BeanDefinitionReader,来加载bean的定义信息,加载到IOC容器中

    public interface BeanDefinitionReader {
        BeanDefinitionRegistry getRegistry();
    
        @Nullable
        ResourceLoader getResourceLoader();
    
        @Nullable
        ClassLoader getBeanClassLoader();
    
        BeanNameGenerator getBeanNameGenerator();
    
        int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException;
    
        int loadBeanDefinitions(Resource... resources) throws BeanDefinitionStoreException;
    
        int loadBeanDefinitions(String location) throws BeanDefinitionStoreException;
    
        int loadBeanDefinitions(String... locations) throws BeanDefinitionStoreException;
    }
    
  3. 将Bean的定义信息加载到IOC容器之后,通过BeanFactory+反射的方式进行实例化,初始化,最终得到Bean对象

  4. 我们需要使用的时候需要通过context.getBean("user")获取Bean对象

依赖注入

依赖注入DI(Dependency Injection):指Spring创建对象的过程中,将对象依赖属性通过配置进行注入。比如,User有一个Person属性,需要把Person对象注入到User的Person属性里面。

public class User {

    private String name;

    private Person person;
}

依赖注入常见的实现方式包括两种:set注入构造注入

依赖注入和IOC的关系:IOC 就是一种控制反转的思想, 而 DI 是对IoC的一种具体实现。

几个接口与实现类的关系

BeanFactory:这是 IoC 容器的基本实现,是 Spring 内部使用的接口。面向 Spring 本身,不提供给开发人员使用。

ApplicationContext:BeanFactory 的子接口,提供了更多高级特性。面向 Spring 的使用者,几乎所有场合都使用 ApplicationContext 而不是底层的 BeanFactory。

类型名 简介
ClassPathXmlApplicationContext 通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象
FileSystemXmlApplicationContext 通过文件系统路径读取 XML 格式的配置文件创建 IOC 容器对象
ConfigurableApplicationContext ApplicationContext 的子接口,包含一些扩展方法 refresh() 和 close() ,让 ApplicationContext 具有启动、关闭和刷新上下文的能力。
WebApplicationContext 专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对象,并将对象引入存入 ServletContext 域中。

在快速入门的案例中,我们获取Bean是这么写的:

//加载spring配置文件,对象创建
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1909773034@qq.com

×

喜欢就点赞,疼爱就打赏