Spring的两种IOC容器

2023-11-19

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");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring的两种IOC容器 的相关文章

随机推荐

  • PCB设计小结

    PCB设计小结 1 给所有元器件编号 快捷键T A A 2 pcb中旋转 3 对齐 pcb中快捷键A 一般是右对齐 底对齐 保存间距 4 CTRL Z键撤销无效 点击撤销按钮也无效 保存重启软件就可以了 5 测距 ctrl m 6自动布线
  • 在vue3 中,使用element-plus中的el-scrollbar,让内容元素自动滚动

    在vue3 中 使用element plus中的el scrollbar 在el scrollbar中如果元素过大出现滑动 就自动滑动 到底部时就返回顶部重新向下滑动 鼠标放入框内停止滑动 模板部分
  • 转:Tendermint 简介

    Tendermint 是分布式一致性软件 即使有1 3的机器叛变了 也能保证其余机器上的数据一致 容忍机器以任意方式失败的能力 包括变得恶意 被称为拜占庭容错 BFT 该理论被提出来数十年了 由于bitcoin和ethereum 区块链技术
  • 【MySQL知识点】group by 的原理和理解

    1 文章转载自 https blog csdn net qq403580298 article details 90756352 ops request misc request id biz id 102 utm term mysql 2
  • 巴比特

    摘要 9 月 13 日 阿里云宣布通义千问大模型已首批通过备案 并正式向公众开放 百度发布文心一言插件生态平台 灵境矩阵 向广大开发者开启邀测 并提供百亿流量 亿元基金等激励措施 扶持插件生态建设 图片来源 由无界AI生成 热点资讯 百度发
  • 使用Nexus3创建docker个人仓库(匿名登录)

    使用Nexus3创建docker个人仓库 前言 一 镜像下载 二 Nexus配置 1 启动容器 2 登录GUI 3 创建仓库 4 创建Role 5 创建User 6 激活Realm 三 配置匿名 1 修改role 2 激活Anonymous
  • C/C++字符变量无法显示的问题

    快要找工作了 最近在狂看 程序员面试宝典 第二版 中间有个题目 作者解释错了 更重要的是 里面有个细节 导致我弄了好久才搞懂 现在拿出来分享下 下面是书中P37的源代码 面试例题1 下面程序的输出结果是多少 include
  • 从零开始的Docker详解(五)

    Docker容器互联 简介 docker可以定义一个连接系统将多个容器都连接在一起 共享连接信息 docker链接会创建一个父子关系 其中父容器可以看到子容器的信息 新建网络 使用命令docker network ls来查看当前已有的doc
  • 微信小程序从后台拿数据并成功展示到前台——demo

    项目结构 我没有使用index文件夹 使用了自己创建的test文件夹 1 创建好页面之后配置app json 2 前台页面 3 页面的js 4 页面展示效果 5 后台代码 一开始还想自己进行json转换 发现有线程的注解可以使用达到对象和j
  • tf好朋友之matplotlib的使用——annotate标注的使用

    tf好朋友之matplotlib的使用 annotate标注的使用 标注常用函数及其作用 1 plt annotate 2 plt text 应用示例 标注常用函数及其作用 1 plt annotate plt annotate s xy
  • 【Git】Github 上传文件常见的几种错误及尝试的解决方法

    文章目录 一 分支引发的错误 二 经常性的网络引发的错误 三 没有找到名为 HEAD 的引用 四 无法识别远程仓库 一 分支引发的错误 具体的错误类型为 error failed to push some refs to https git
  • 【软件测试】Requests库中处理cookie的几种方式

    前言 发送请求时经常需要利用请求头中的cookie字段来做用户访问状态的保持 关于的cookie的处理常见有下面一些处理方式 这里做个小小的总结 1 直接在请求中传递cookies参数 import requests host http 1
  • [163]星号密码探测工具 - 代码远程线程注入的简单运用

    忙里偷闲 在看雪论坛上面看到有人发布了一个 Win7星号密码探测工具 发现 有那么一点 小用处 用处不大的原因是 这个程序的的能力相当有限 只能查看一部分安全性不高的软件的密码框里面的程序 如果你要拿它来看QQ的密码 想当然 那是不可能了
  • printf怎么输出? 如何正确使用%s,%c,%d,%p?=>这篇详解用法

    printf怎么输出 gt 如何正确使用 s c d p d试例 include
  • jquery 全国 三联 地址选择

    https www jq22 com demo jquery jdxz20160902
  • 中文命名实体识别

    中文命名实体识别 1 语言技术平台 LTP 2 Pyhanlp 3 BosonNLP 1 语言技术平台 LTP LTP官方地址 语言技术平台 Language Technology Plantform 要想用LTP实现中文命名实体识别非常简
  • JAVA基础06方法

    6 方法 方法可以用于定义可重用的代码以及组织和简化编码 6 1 定义方法 方法的定义由方法名称 参数 返回值类型以及方法体组成 定义方法的语法如下所示 修饰符 返回值类型 方法名 参数列表 方法体 我们一起来看一个方法的定义 该方法找出两
  • Normalizing Flows (NF) - 流模型 - 研究方向

    Normalizing Flows An Introduction and Review of Current Methods 2020 TPAMI Open problems and possible research direction
  • K8S暴露端口-dubbo应用远程Debug

    1 Dockerfile增加环境变量 ENV JAVA OPTS Xdebug Xrunjdwp transport dt socket address 9901 server y suspend n 2 暴露端口 template ser
  • Spring的两种IOC容器

    文章目录 Spring IOC容器 BeanFactory 怎样创建BeanFactory BeanFactory中的方法 ApplicationContext 几种ApplicationContext 如何创建ApplicationCon