还君明珠双泪垂,恨不相逢未嫁时。
Spring IoC
容器是Spring
框架的核心。只需要进行简单的容器配置,就可以将创建对象,使用对象,销毁对象联系在一起,从而管理从创建对象到销毁对象的整个生命周期。Spring
容器使用依赖项注入(DI
)来管理组成应用程序的组件。
Spring提供以下两种类型的容器。
BeanFactory
容器ApplicationContext
容器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);
ClassPathResource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
基本上都是使用getBean(String)
方法在容器中检测并获取实例。 BeanFactory
接口里面的方法非常简单
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
容器添加了更多企业特定功能,例如从属性文件解析文本消息的功能以及将应用程序事件发布到感兴趣的事件侦听器的功能。该容器由org.springframework.context.ApplicationContext
接口定义。
ApplicationContext
容器包含BeanFactory
容器的所有功能,因此通常建议在BeanFactory
上使用它。 BeanFactory
仍可用于轻量级应用程序,例如移动设备或基于applet
的应用程序等。
最常用的ApplicationContext
实现如下:
FileSystemXmlApplicationContext
–此容器从XML
文件加载Bean
的定义。在这里,您需要向构造函数提供XML bean
配置文件的完整路径。ClassPathXmlApplicationContext
–此容器从XML
文件加载Bean
的定义。在这里,您无需提供XML
文件的完整路径,但需要正确设置CLASSPATH
,因为此容器将在CLASSPATH
中查找bean
配置XML
文件。WebXmlApplicationContext
–此容器从Web
应用程序中加载带有所有bean
定义的XML
文件。用于应用程序上下文实例化的示例代码如下所示。
ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");