概述
Spring IoC 容器是Spring框架的核心。只需要进行简单的容器配置,就可以将创建对象,使用对象,销毁对象联系在一起,从而管理从创建对象到销毁对象的整个生命周期。Spring容器使用依赖项注入(DI)来管理组成应用程序的组件。
Spring提供以下两种类型的容器。
- Bean factory 容器
- ApplicationContext 容器
BeanFactory
BeanFactory本质上就是一个高级工厂的接口,该工厂能够维护不同bean及其依赖项的对象。
BeanFactory使我们能够读取bean定义并使用bean工厂访问它们
InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);
//Get bean
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
创建bean工厂的其他方法如下:
Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
Class PathResource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
基本上都是使用getBean(String)方法在容器中检测并获取实例。 BeanFactory接口里面的方法非常简单
BeanFactory methods
BeanFactory接口主要有以下方法由客户端调用
- boolean containsBean(String):如果BeanFactory包含与给定名称匹配的bean定义或bean实例,则返回true
- Object getBean(String):返回给定名称注册的bean的实例。根据BeanFactory如何配置Bean,将返回单个实例或者共享实例或新创建的Bean。当找不到该bean(在这种情况下它将是NoSuchBeanDefinitionException),或者在 实例化 和准备该bean时发生异常时,将抛出BeansException。
- Object getBean(String,Class):返回给定名称注册的bean。返回的bean将被强制转换为给定的Class。如果无法投射bean,则将引发相应的异常(BeanNotOfRequiredTypeException)。此外,适用getBean(String)方法的所有规则
- Class getType(String name):返回具有给定名称的Bean的Class。如果找不到与给定名称对应的bean,则将引发NoSuchBeanDefinitionException
- boolean isSingleton(String):确定给定名称注册的bean定义或bean实例是否为单例。如果找不到与给定名称对应的bean,则将引发NoSuchBeanDefinitionException
- String [] getAliases(String):返回给定bean名称的别名(如果在bean定义中定义了别名)
ApplicationContext
ApplicationContext容器添加了更多企业特定功能,例如从属性文件解析文本消息的功能以及将应用程序事件发布到感兴趣的事件侦听器的功能。该容器由org.springframework.context.ApplicationContext接口定义。
ApplicationContext容器包含BeanFactory容器的所有功能,因此通常建议在BeanFactory上使用它。 BeanFactory仍可用于轻量级应用程序,例如移动设备或基于 applet 的应用程序等。
ApplicationContext类型
最常用的ApplicationContext实现如下:
- FileSystemXmlApplicationContext –此容器从XML文件加载Bean的定义。在这里,您需要向 构造函数 提供XML bean配置文件的完整路径。
- ClassPathXmlApplicationContext –此容器从XML文件加载Bean的定义。在这里,您无需提供XML文件的完整路径,但需要正确设置CLASSPATH,因为此容器将在CLASSPATH中查找bean配置XML文件。
- WebXmlApplicationContext –此容器从Web应用程序中加载带有所有bean定义的XML文件。
如何创建ApplicationContext
用于应用程序上下文实例化的示例代码如下所示。
ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml"); HelloWorld obj = (HelloWorld) context.getBean("helloWorld");