Spring IoC容器

转自:

Spring IoC容器

一、Ioc简介


IoC容器是Spring中的核心
我们通常也将其称之为Spring容器
Spring使用IoC容器对对象的实例化和初始化的操作,及管理对象的创建到销毁的生命周期
Spring中使用的对象全部由IoC容器进行管理,所以在借助Spring开发时,我们无需使用new关键字创建对象

我们将IoC容器管理的对象称为Spring Bean
Spring Bean就是 Java 对象,它同new关键字创建的对象相同
在Spring中我们可以通过XML或Java注解两种方式创建生成Java Bean
 

二、IoC容器的类型


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);  

2. ApplicationContext 容器

ApplicationContext 继承了 BeanFactory 接口,
由 org.springframework.context.ApplicationContext 接口定义,对象在启动容器时加载

ApplicationContext 在 BeanFactory 的基础上增加了很多企业级功能,如 AOP、国际化、事件支持等

ApplicationContext 接口有两个常用的实现类,具体如下。
1)ClassPathXmlApplicationContext
该类从类路径 ClassPath 中寻找指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作,具体如下所示。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
在上述代码中,configLocation 参数用于指定 Spring 配置文件的名称和位置,如 Beans.xml。
2)FileSystemXmlApplicationContext
该类从指定的文件系统路径中寻找指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作,具体如下所示。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
它与 ClassPathXmlApplicationContext 的区别是:
在读取 Spring 的配置文件时,
FileSystemXmlApplicationContext 不会从类路径中读取配置文件,而是通过参数指定配置文件的位置。
即 FileSystemXmlApplicationContext 可以获取类路径之外的资源,如“D:/test/Beans.xml”。

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

 

    contextConfigLocation
    
    
        classpath:spring/applicationContext.xml
    



    
        org.springframework.web.context.ContextLoaderListener
    


注意事项:
  BeanFactory及ApplicationContext 都可采用XML配置文件的方式加载Bean
二者的区别:
    当Bean中某一个属性没有注入,使用 BeanFacotry 加载后,第一次调用 getBean() 方法时会抛出异常
   而 ApplicationContext 则会在初始化时自检,这样有利于检查所依赖的属性是否注入

在日常的开发中,我们经常使用ApplicationContext
在一些特殊的情况下,如:系统资源较少时,才会使用 BeanFactory 

你可能感兴趣的:(Spring,spring)