Spring – IoC 容器
原文: https://howtodoinjava.com/spring-core/different-spring-ioc-containers/
Spring IoC 容器是 Spring 框架的核心。 容器将创建对象,将它们连接在一起,进行配置,并管理从创建到销毁的整个生命周期。 Spring 容器使用依赖项注入(DI)来管理组成应用程序的组件。
Spring 在提供两种类型的容器。
BeanFactory
容器ApplicationContext
容器
阅读更多:控制反转和依赖注入
1. BeanFactory
BeanFactory
本质上不过是一个高级工厂的接口,该工厂能够维护不同 Bean 及其依赖项的注册表。
BeanFactory
使我们能够读取 bean 定义并使用 bean 工厂访问它们。
1.1. 如何创建BeanFactory
仅使用BeanFactory
时,我们可以创建一个并以 XML 格式读取一些 bean 定义,如下所示:
How to Create XmlBeanFactory
InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);
//Get bean
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
创建 bean 工厂的其他方法如下:
How to Create XmlBeanFactory
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 的实例; BeanFactory
的客户端视图非常简单。
1.2. 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 定义中定义了别名)
2. ApplicationContext
ApplicationContext
容器添加了更多企业特定的功能,例如从属性文件解析文本消息的功能以及将应用程序事件发布到感兴趣的事件监听器的功能。 该容器由org.springframework.context.ApplicationContext
接口定义。
ApplicationContext
容器包含BeanFactory
容器的所有功能,因此通常建议在BeanFactory
上使用。 BeanFactory
仍可用于数据量和速度非常重要的轻量级应用程序,例如移动设备或基于 applet 的应用程序。
2.1. ApplicationContext
的类型
最常用的ApplicationContext
实现是:
FileSystemXmlApplicationContext
– 此容器从 XML 文件加载 Bean 的定义。 在这里,您需要向构造函数提供 XML bean 配置文件的完整路径。ClassPathXmlApplicationContext
– 此容器从 XML 文件加载 Bean 的定义。 在这里,您不需要提供 XML 文件的完整路径,但是需要正确设置 CLASSPATH,因为此容器将在 CLASSPATH 中查找 bean 配置 XML 文件。WebXmlApplicationContext
– 此容器从 Web 应用程序中加载带有所有 bean 定义的 XML 文件。
2.2. 如何创建ApplicationContext
用于应用程序上下文实例化的示例代码如下所示。
How to create ApplicationContext
ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
将我的问题放在评论部分。
学习快乐!
参考文献: