Spring IoC

引言

要明白 Spring IoC 容器的作用,就必须先弄明白 IoC(控制反转) 和 DI(依赖注入) 这两个概念。

IoC 概念

IoC(控制反转)就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责,这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。控制权转移带来的好处就是降低了业务对象之间的依赖程度(低耦合、高内聚)。

这里所说的外部容器指的就是 Spring IoC 容器,IoC 控制反转就是由 IoC 容器负责实例化对象,也就是说有了 IoC 容器就不用自己 new 对象了啦。

DI 概念

DI(Dependency Injection,依赖注入)可以向某个对象动态的注入它所依赖的其他对象的引用。

有了 DI(依赖注入),IoC 容器就可以把实例化的对象注入给应用本身,这样开发者就可以不用自己去 new 对象以及建立对象之间的依赖关系,只需要使用对象就可以了。

依赖注入的方式:

  • 构造器注入

  • 方法注入

  • 接口注入

Spring IoC 容器支持构造器注入和方法注入

从上图可以看到,通过使用 Spring IoC 容器可以达到三层架构降低耦合度的效果,让三层之间不存在依赖之间,它们都依赖于 IoC 容器。

Spring IoC 容器

Spring IoC 容器是指实现 IoC (控制反转)和 DI(依赖注入)概念的一个 Spring 组件,开发者使用 IoC 容器可以获得 IoC/DI 带来的降低耦合度和简化开发的特性。

  • Bean

Spring 中使用 Bean 来表示应用组件,一个 Bean 组件可以是任何形式的简单 Java 类实例,Spring 中使用 IoC 容器来管理 Bean 的生命周期(Bean 的创建和销毁)

  • BeanFactory(Bean 工厂)

BeanFactory 是 Spring 框架最核心的接口,它提供了高级 IoC 的配置机制;BeanFactory 使管理不同类型的 Java 对象成为可能。
BeanFactory 是 Spring 框架的基础设施,属于底层封装组件,专供 Spring 框架内部使用

  • ApplicationContext ( 应用上下文 )

ApplicationContex 是建立在 BeanFactory 基础之上,提供了更多面向应用的功能。一般称BeanFactory为IoC容器,而称ApplicationContext 为应用上下文。ApplicationContext 面向 Spring 框架的开发者,属于上层封装组件,专供开发者使用。通过 ApplicationContext 应用上下文实例调用其 getBean() 方法从 IoC 容器中即可获取 Bean 对象实例

启动 IoC 容器

Spring 有三种启动 IoC 容器的方式,如下:

  • ClassPathXmlApplicationContext(相对路径)

从类路径下的 XML 配置文件中加载上下文定义,把应用上下文定义文件当做类资源

复制代码
ApplicationContext ctx = new ClassPathXmlApplicationContext(“包路径/beans.xml”)

  • FileSystemXmlApplicationContext(绝对路径)

读取文件系统下的 XML 配置文件并加载上下文定义

复制代码
ApplicationContext ctx = new FileSystemtXmlApplicationContext(“文件路径/beans.xml”)
  • XmlWebApplicationContext(web 配置路径)
    读取 Web 应用下的 XML 配置文件并加载上下文定义

装配 Bean

装配 Bean 是指在 Spring IoC 容器中创建 Bean 组件和建立 Bean 组件之间的依赖关系的过程,即实现 IoC(控制反转)和 DI(依赖注入)。
Spring 支持三种装配 Bean 的方式:

  • 基于 XML 配置装配 Bean

  • 基于注解装配 Bean

  • 基于 Java 类装配 Bean

注解装配 Bean

开启注解
复制代码
<!--Spring IoC 容器需要在 Spring 配置中开启注解(默认禁用注解)-->
<context:annotation-config />
<!--Spring IoC 容器需要自动检测 Bean(扫描 Java 类中 Bean 组件) -->
<context:component-scan packages=“包路径”/>
IoC 注解
  • @Component:标识 Java 类为 Spring Bean 组件(通用注解)

  • @Controller:标识三层架构中表现层的 Java 类为 Spring Bean 组件

  • @Service:标识三层架构中业务逻辑层的 Java 类为 Spring Bean 组件

  • @Repository:标识三层架构中业务持久层的 Java 类为 Spring Bean 组件

DI 注解
  • @Autowired:依赖注入

  • @Resource:使用与 @Autowired 注解相同

  • @Qualifer:明确指定需要自动装配的 Bean 组件

总结

Spring IoC 容器的作用就是实现了 IoC(控制反转)和 DI(依赖注入),对于已经在容器里面的则使用依赖注入,例如@Autowired、@Resourse等。如果没有在容器里面则需要使用@Component等注解来放进IOC容器。

posted @ 2023-10-06 18:46  粹白  阅读(7)  评论(0编辑  收藏  举报