前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring系列二:IoC 容器

Spring系列二:IoC 容器

作者头像
java干货
发布2021-02-19 11:10:57
4260
发布2021-02-19 11:10:57
举报
文章被收录于专栏:java干货

还君明珠双泪垂,恨不相逢未嫁时。

https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/spring/spring02.jpg
https://raw.githubusercontent.com/longfeizheng/longfeizheng.github.io/master/images/spring/spring02.jpg

概述

Spring IoC容器是Spring框架的核心。只需要进行简单的容器配置,就可以将创建对象,使用对象,销毁对象联系在一起,从而管理从创建对象到销毁对象的整个生命周期。Spring容器使用依赖项注入(DI)来管理组成应用程序的组件。

Spring提供以下两种类型的容器。

  1. BeanFactory 容器
  2. ApplicationContext 容器

BeanFactory

BeanFactory本质上就是一个高级工厂的接口,该工厂能够维护不同bean及其依赖项的对象。

BeanFactory使我们能够读取bean定义并使用bean工厂访问它们

代码语言:javascript
复制
InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);

//Get bean
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");

创建bean工厂的其他方法如下:

代码语言:javascript
复制
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 methods

BeanFactory接口主要有以下方法由客户端调用

  1. boolean containsBean(String):如果BeanFactory包含与给定名称匹配的bean定义或bean实例,则返回true
  2. Object getBean(String):返回给定名称注册的bean的实例。根据BeanFactory如何配置Bean,将返回单个实例或者共享实例或新创建的Bean。当找不到该bean(在这种情况下它将是NoSuchBeanDefinitionException),或者在实例化和准备该bean时发生异常时,将抛出BeansException
  3. Object getBean(String,Class):返回给定名称注册的bean。返回的bean将被强制转换为给定的Class。如果无法投射bean,则将引发相应的异常(BeanNotOfRequiredTypeException)。此外,适用getBean(String)方法的所有规则
  4. Class getType(String name):返回具有给定名称的BeanClass。如果找不到与给定名称对应的bean,则将引发NoSuchBeanDefinitionException
  5. boolean isSingleton(String):确定给定名称注册的bean定义或bean实例是否为单例。如果找不到与给定名称对应的bean,则将引发NoSuchBeanDefinitionException
  6. String [] getAliases(String):返回给定bean名称的别名(如果在bean定义中定义了别名)

ApplicationContext

ApplicationContext容器添加了更多企业特定功能,例如从属性文件解析文本消息的功能以及将应用程序事件发布到感兴趣的事件侦听器的功能。该容器由org.springframework.context.ApplicationContext接口定义。

ApplicationContext容器包含BeanFactory容器的所有功能,因此通常建议在BeanFactory上使用它。 BeanFactory仍可用于轻量级应用程序,例如移动设备或基于applet的应用程序等。

ApplicationContext类型

最常用的ApplicationContext实现如下:

  1. FileSystemXmlApplicationContext –此容器从XML文件加载Bean的定义。在这里,您需要向构造函数提供XML bean配置文件的完整路径。
  2. ClassPathXmlApplicationContext –此容器从XML文件加载Bean的定义。在这里,您无需提供XML文件的完整路径,但需要正确设置CLASSPATH,因为此容器将在CLASSPATH中查找bean配置XML文件。
  3. WebXmlApplicationContext –此容器从Web应用程序中加载带有所有bean定义的XML文件。
如何创建ApplicationContext

用于应用程序上下文实例化的示例代码如下所示。

代码语言:javascript
复制
ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • BeanFactory
      • BeanFactory methods
    • ApplicationContext
      • ApplicationContext类型
      • 如何创建ApplicationContext
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档