Spring5源码学习之IOC容器

141 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

1 IOC容器

1 什么是IOC?

IOC, 控制反转,把创建和独享之间的调用过程,交给Spring进行管理.

目的: 为了耦合度降低

2 IOC底层原理

IOC底层原理包括: xml 解析、工厂模式、反射.

案例1

两个类之间调用.

class UserDao{
    add(){
        .....
    }
}
class UserService{
    execute(){
        UserDao dao = new UserDao();
        dao.add()
    }
}

这种两个类之间的调用,耦合度很高,不方便维护和扩展.

案例2 改造方案1

class UserDao{
    add(){
        .....
    }
}

方法工厂

class UserFactory{
    public static UserDao getDao(){
        return new UserDao();
    }
}
class UserService{
    execute(){
        UserDao dao = UserFactory.getDao();
        dao.add()
    }
}

通过工厂类,将UserService和UserDao解耦,但是工厂类也和使用类耦合,相比方案1,有降低偶和.

案例3 改造方案1

使用的技术包括: xml 解析、工厂模式、反射

主要的目的:将两个类的耦合降到最低.

1 添加xml配置文件

<bean id = "user" class = "com.cf.UserDao"></bean>

2 创建工厂类,获取对象

class UserFactory{
    public static UserDao getDao(){
      // 1 解析xml
      // String classValue = classValue;
      // 2 通过反射创建对象
        Class clazz = Class.forName(classValue);
        return (UserDao)clazz.newInstance();
    }
}

综上, 相比三种方案, 一步步降低类之间的耦合, 使用IOC容器管理,可以将类之间的耦合度到最低,方便项目的开发和维护使用.

3 IOC 接口 (BeanFactory)

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

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

  • BeanFactory IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用. (加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象)
  • ApplicationContext BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人 员进行使用. (加载配置文件时候就会把在配置文件对象进行创建)

ps: 综上可知,一般项目启动慢,响应快,是因为在项目启动时,加载配置文件,创建了很多需要使用的对象,并进行保存待用.

3 ApplicationContext接口的实现类

常常使用的有:

  • FileSystemXmlApplicationContext
  • ClassPathXmlApplicationContext