解析:Spring IoC容器

IoC容器是Spring的核心,也可以称为Spring容器。Spring通过IoC容器来管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期。

Spring中使用的对象都由IoC容器管理,不需要我们手动使用new运算符创建对象。由IoC容器管理的对象称为SpringBean,SpringBean就是Java对象,和使用new运算符创建的对象没有区别。

Spring通过读取XML或Java注解中的信息来获取哪些对象需要实例化。

Spring提供2种不同类型的IoC容器,即BeanFactory和ApplicationContext容器。

1.BeanFactory容器

BeanFactory是最简单的容器,由org.springframework.beans.factory.BeanFactory接口定义,采用懒加载(lazy-load),所以容器启动比较快。BeanFactory提供了容器最基本的功能。

为了能够兼容Spring集成的第三方框架(如BeanFactoryAware、InitializingBean、DisposableBean),所以目前仍然保留了该接口。

简单来说,BeanFactory就是一个管理Bean的工厂,它主要负责初始化各种Bean,并调用它们的生命周期方法。

BeanFactory接口有多个实现类,最常见的是org.springframework.beans.factory.xml.XmlBeanFactory。使用BeanFactory需要创建XmlBeanFactory类的实例,通过XmlBeanFactory类的构造函数来传递Resource对象。如下所示。

Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);  12复制代码类型:[java]

2.ApplicationContext容器

ApplicationContext继承了BeanFactory接口,由org.springframework.context.ApplicationContext接口定义,对象在启动容器时加载。ApplicationContext在BeanFactory的基础上增加了很多企业级功能,例如AOP、国际化、事件支持等。

ApplicationContext接口有两个常用的实现类,具体如下。

1)ClassPathXmlApplicationContext

该类从类路径ClassPath中寻找指定的XML配置文件,并完成ApplicationContext的实例化工作,具体如下所示。

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);1复制代码类型:[java]

在上述代码中,configLocation参数用于指定Spring配置文件的名称和位置,如Beans.xml。

2)FileSystemXmlApplicationContext

该类从指定的文件系统路径中寻找指定的XML配置文件,并完成ApplicationContext的实例化工作,具体如下所示。

ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);1复制代码类型:[java]

它与ClassPathXmlApplicationContext的区别是:在读取Spring的配置文件时,FileSystemXmlApplicationContext不会从类路径中读取配置文件,而是通过参数指定配置文件的位置。即FileSystemXmlApplicationContext可以获取类路径之外的资源,如“F:/workspaces/Beans.xml”。

通常在Java项目中,会采用ClassPathXmlApplicationContext类实例化ApplicationContext容器的方式,而在Web项目中,ApplicationContext容器的实例化工作会交由Web服务器完成。Web服务器实例化ApplicationContext容器通常使用基于ContextLoaderListener实现的方式,它只需要在web.xml中添加如下代码:

<!--指定Spring配置文件的位置,有多个配置文件时,以逗号分隔-->
<context-param>
 <param-name>contextConfigLocation</param-name>
 <!--spring将加载spring目录下的applicationContext.xml文件-->
 <param-value>
  classpath:spring/applicationContext.xml
 </param-value>
</context-param>
<!--指定以ContextLoaderListener方式启动Spring容器-->
<listener>
 <listener-class>  org.springframework.web.context.ContextLoaderListener
 </listener-class>
</listener>1234567891011121314复制代码类型:[java]

需要注意的是,BeanFactory和ApplicationContext都是通过XML配置文件加载Bean的。

二者的主要区别在于,如果Bean的某一个属性没有注入,使用BeanFacotry加载后,第一次调用getBean()方法时会抛出异常,而ApplicationContext则会在初始化时自检,这样有利于检查所依赖的属性是否注入。

因此,在实际开发中,通常都选择使用ApplicationContext,只有在系统资源较少时,才考虑使用BeanFactory。本教程中使用的是ApplicationContext容器。

(0)

相关推荐

  • 2021最新 Spring面试题精选(附刷题小程序)

    目录 推荐使用小程序阅读 1. Spring基础 1.1 什么是 spring? 1.2 Spring框架的设计目标,设计理念,和核心是什么? 1.3 Spring 框架中都用到了哪些设计模式? 1. ...

  • Java开发中SSM框架整合开发之 Spring IoC

     Spring IoC的基本概念 控制反转(Inversion of Control,IoC)是一个比较抽象的概念,是Spring框架的核心,用来消减计算机程序的耦合问题.依赖注入(Dependenc ...

  • 小白新手web开发简单总结(六)-Spring的IoC容器

    目录 一 前言 二 什么是IoC容器 三 实例 1.通过XML配置规则 2.通过注解 3.Spring中的其他几种注解 四 JavaBean生命周期的监听 五 总结 一 前言 接上篇小白新手web开发 ...

  • 自制IOC容器(1)

    本系列文章介绍ByxContainer的实现思路. ByxContainer是一个简单的轻量级IOC容器,具有以下特性: 使用JSON格式的配置文件 支持构造函数注入.静态工厂注入.实例工厂注入.属性 ...

  • 自制IOC容器(2)

    本系列文章介绍ByxContainer的实现思路. ByxContainer是一个简单的轻量级IOC容器,具有以下特性: 使用JSON格式的配置文件 支持构造函数注入.静态工厂注入.实例工厂注入.属性 ...

  • 死磕Spring之IoC篇 - 深入了解Spring IoC(面试题)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  • 一文解析Spring是什么?

    Spring自诞生以来一直备受青睐,它包括许多框架,例如Springframework.SpringMVC.SpringBoot.SpringCloud.SpringData.SpringSecuri ...

  • 工厂模式讲解, 引入Spring IOC

    目录 引入 简单工厂 抽象工厂 Spring的bean工厂 模拟Spring工厂实现 模拟IOC 引入 假设有一个司机, 需要到某个城市, 于是我们给他一辆汽车 public class Demo { ...

  • spring IOC的理解

    spring IOC的理解

  • 解析Spring Cloud经典面试问题

    Spring Cloud是个工具集,整合了各种组件.例如Eureka.Ribbon.Feign等.本文整理关于Spring Cloud的面试问题,希望对你有帮助. 问:什么是Netflix Feign ...

  • Spring Ioc的原理

    今天给大家介绍一下关于SpringIoc原理的详解,首先Ioc是InversionofControl.翻译过来就是控制反转,意思是对象之间的关系不再由传统的程序来控制,而是由spring容器来统一控制 ...