11.15 Spring Ioc容器

11.15 Spring Ioc容器

Ioc容器在Spring当中的地位

地位:

  • Spring的核心

作用:

  • Spring通过IoC容器管理对象的实例化、初始化

  • 管理对象从创建到销毁的整个生命周期

管理方式:

  • 读取XML

  • 读取Java注解

Spring的IoC容器类型

  • BeanFactory容器

  • ApplicationContext容器


BeanFactory容器

特点:

  • org.springframework.beans.factory.BeanFactory接口定义

  • 采用懒加载(lazy-load)容器启动快

  • 一个Bean工厂,主要负责初始化各种 Bean,并调用它们的生命周期方法。

  • BeanFactory容器本身是一个接口,有多个实现类。

常见的BeanFactory实现类:

org.springframework.beans.factory.XmlBeanFactory

通过XmlBeanFactory类的构造函数传递Resource进而使用BeanFactory

Resource resource = new ClassPathResource("applicationContext.xml"); 
BeanFactory factory = new XmlBeanFactory(resource);  

ApplicationContext容器

特点:

  • 继承了BeanFactory接口,由org.springframework.context.ApplicationContext接口定义

  • 启动容器时加载

ApplicationContext接口的两个实现类:

  • ClassPathXmlApplicationContext

  • FileSystemXmlApplicationContext

ClassPathXmlApplicationContext

该类作用:

  • 从类路径中寻找指定的XML配置文件,完成ApplicationContext的实例化工作

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
/*形参是指定的Spring配置文件的名称和位置*/
FileSystemXmlApplicationContext

该类作用:

  • 从指定的文件系统路径中寻找指定的XML配置文件,并完成ApplicationContext的实例化

ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);

ClassPathXmlApplicationContext的区别:

  • FlieSystemXmlApplicationContext不会从类路径中读取Spring的配置文件。而是通过参数指定配置文件的位置--->该实现类可以获取类路径之外的资源

  • Java项目中多采用ClassPathXmlApplicationContext类实例化ApplicationContext容器

  • Web项目中ApplicationContext容器实例化工作会由Web服务器完成,使用基于ContextLoaderListener的方式,在Web.xml中添加

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

注意:

  • BeanFactoryApplicationContext都是通过XML配置文件加载Bean

二者区别:

BeanFactory

  • 如果Bean的某一个属性没有注入,使用BeanFacotry加载后,第一次调用getBean()方法时会抛出异常

ApplicationContext

  • 如果Bean的某一个属性没有注入,初始化的时候会自检

实际开发过程中常使用ApplicationContext

posted @ 2022-01-18 18:58  俊king  阅读(32)  评论(0)    收藏  举报