Spring IOC容器
Spring IOC 容器是整个Spring框架的核心部分。容器会创建对象,配置对象之间的依赖关系,并且还会管理这些对象完整的生命周期。Spring IOC容器使用 依赖注入(D) 来管理组成应用程序的组件。
Spring主要提供了两种IOC容器:
- BeanFactory容器
- ApplicationContext容器
BeanFactory
BeanFactory本质上是一个提供了可以维护注册在它里面的不同对象,以及维护这些对象之间的依赖关系的高级工厂接口。
开发人员可以使用BeanFactory来管理和使用注册在里面的Bean对象
怎样创建BeanFactory
通过创建一个XML格式的来定义Bean,并且通过读取这个XML文件来获取定义的Bean。
InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
也可以通过这种方式来实现:
Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
ClassPathResource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
后面基本上就是使用getBean(String)
方法来获取定义的Bean对象实例了。所以Spring IOC容器暴露给客户端的API是非常的简单的。
BeanFactory中的方法
BeanFactory接口有很多种方法供客户端使用,这里简单的介绍几种:
-
boolean containsBean(String)
:如果BeanFactory容器中包含给定名称的Bean或Bean实例,就返回true。
-
Object getBean(String):
返回给定名称注册的Bean的实例,如果找不到该实例将会抛出 NoSuchBeanDefinitionException
异常。
-
boolean isSingletion(String)
返回给定名称的Bean是否是单例
-
String [] getAliases(String)
返回给定Bean实例的别名。
ApplicationContext
ApplicationContext添加了一些额外的企业特定的功能,比如从配置文件中处理文字信息的能力,再比如事件发布监听的能力。这个容器被定义org.springframework.context.ApplicationContext
接口。
ApplicationContext容器提供了 BeanFactory容器的全部功能,所以它被推荐用来代替 BeanFactory。BeanFactory依然也可以使用在轻量级的应用上,比如像是手机设备或者java applet应用上。
几种ApplicationContext
- FileSystemXmlApplicationContext
- ClassPathXmlApplicationContext
- WebXmlApplicationContext
如何创建ApplicationContext
下面是一个简单的例子展示如何创建一个ApplicationContext容器
ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");