Spring IoC 容器 及 DI 理解

1. 关于 Spring

Spring 是一个轻量级的开源框架,可以简化企业级应用程序开发,其优点有:

  • 方便解耦,简化开发:通过 Spring 提供的 IoC 容器来管理对象间的依赖关系,避免过度耦合
  • AOP 编程的支持
  • 声明式事务的支持
  • 方便程序的测试,相对于 EJB 容器
  • 方便集成其他第三方框架和类库

2. Spring 框架结构

之前在网上看到的这张图展示的很清楚了,Spring 框架大致包含了四个模块(其实还有测试框架):IoC 容器、AOP、数据访问及集成以及 Web 模块。其中 IoC 容器属于 Spring 的核心模块。
在这里插入图片描述

3. IoC 容器

在 Spring 出现前,传统的编程中,我们需要调用其他类的非静态方法时,通常的做法是 new 一个对象,再调用方法。这样的话,一个类中又引用其他类,耦合度非常高。如果日后需要调整、修改时,则需要修改源代码。而且某些对象会被重复创建,比如:Service 层调用 DAO 层方法时重复创建,没有必要,即使是用单例模式解决了对象重复问题,但也引入了新的问题——项目大时,多个 DAO 则每个 DAO 书写重复的单例模式代码,十分繁琐。

后来 Spring 引入了 IoC 容器,IoC(Inversion of Control),中文称为控制反转,其中控制是指控制对象的创建和依赖关系,反转可以理解为转移,将这种控制权转移给 IoC 容器,由它来管理项目中依赖类之间的创建、拼接、管理、获取等工作。

举个栗子,当 Car 对象需要 Tyre(轮子)对象时,IoC 容器会创建 Tyre 对象直接注入到 Car 对象中,不需要 Car 对象自己去获取(或者自己造轮子)。

Spring 主要的容器

  • BeanFacotry:一般只面向 Spring 本身,更偏向底层的使用,是 Spring 框架的核心接口,它实现了容器的许多核心功能。
  • ApplicationContext:面向 Spring 框架的开发者,一般在使用的时候都是应该使用它而非BeanFactory
  • WebApplicationContext:专门为 Web 应用而准备的容器,允许 Web 应用环境直接访问 Spring 应用上下文;需要 Web 容器(如 Tomcat)才可以完成启动工作

ApplicationContext 容器
ApplicationContext 有两个常用的实现类

  • ClassPathXMLApplicationContext: 从类路径下加载配置文件
  • FileSystemXmlApplicationContext: 从文件系统中加载配置文件

上面两个类同时实现了ConfigurableApplicationContext接口,这个接口新增加两个主要方法:refresh() 和 close(),让 ApplicationContext 具有启动、刷新和关闭上下文的能力。

而且 ApplicationContext 容器在初始化上下文的时候就会实例化所有单例模式的 Bean。

4. DI(Dependency Injection)

又称依赖注入,上面的 IoC 可以理解成是 Spring 管理对象的一种设计理念,而 DI 则是 Spring 实现这种理念所使用的具体方法,主要有构造器注入属性注入以及接口注入(资料比较少,说是侵入性比较强,很少使用,有兴趣的可以 Google 下)。大致思想是通过 IoC 容器 Spring 把众多对象独立创建,然后根据配置好的依赖关系,把被依赖的对象赋值给依赖对象的成员属性。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值