浅析:Spring框架中IOC容器和Bean的配置

2023-11-12

一、 IOC和DI的解释

1.     IOC(Inversion of Control):反转控制

        在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。

        反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式

  • 传统方式:   我想吃饭    我需要买菜做饭
  • 反转控制:   我想吃饭    饭来张口

    2.    DI(Dependency Injection):依赖注入

    IOC的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。

    总结: IOC 就是一种反转控制的思想, 而DI是对IOC的一种具体实现。

3. IOC容器在Spring中的实现

  1. 前提:  Spring中有IOC思想,  IOC思想必须基于 IOC容器来完成, 而IOC容器在最底层实质上就是一个对象工厂.

    1)在通过IOC容器读取Bean的实例之前,需要先将IOC容器本身实例化。

    2)Spring提供了IOC容器的两种实现方式

    ① BeanFactory:IOC容器的基本实现,是Spring内部的基础设施,是面向Spring本身的,不是提供给开发人员使用的。

    ② ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。

  2. ApplicationContext的主要实现类

  • ClassPathXmlApplicationContext:对应类路径下的XML格式的配置文件
  • FileSystemXmlApplicationContext:对应文件系统中的XML格式的配置文件
  • 在初始化时就创建单例的bean,也可以通过配置的方式指定创建的Bean是多实例的.

3.ConfigurableApplicationContext

  • 是ApplicationContext的子接口,包含一些扩展方法
  • refresh()和close()让ApplicationContext具有启动、关闭和刷新上下文的能力。
  1.  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅析:Spring框架中IOC容器和Bean的配置 的相关文章

随机推荐

  • vue 看sass版本_看看不同的Sass架构

    vue 看sass版本 As the size and complexity of a project grows you require some sort of logic to structure your Sass files It
  • cloudfoundry简介

    cloudfoundry 负载均衡 对Router做负载均衡不属于Cloud Foundry的实现范围 Cloud Foundry只须保证所有Router都可以处理任何请求 而管理员可用DNS实现负载均衡 也可部署专用硬件来实现 或者简单点
  • Shell脚本中$0、$?、$!、$$、$*、$#、$@等符号的意义

    0 Shell本身的文件名 Shell最后运行的后台进程PID 当前脚本运行的进程PID 执行上一个指令的返回值 显示最后命令的退出状态 0表示没有错误 其他任何值表明有错误 所有参数列表 如 用双引号引起来的情况 以 1 2 n 的形式输
  • Flutter中使用sqlite

    在本教程中 我们将介绍如何在flutter中使用sqlite SQLite是用于移动设备和某些计算机SQL引擎 我们可以使用它来保存应用程序的数据 持久性存储对于在加载新数据时缓存网络呼叫和脱机应用程序很有用 引入依赖 查询sqflite最
  • git快速创建多个文件夹和文件

    小目标 创建多个文件夹 1 首先切换到想要创建文件夹的位置 点击右键 git Bash Here打开终端 输入下面一串 mkdir departments employees setting salarys social attendanc
  • C++ this指针详解

    this指针 this指针介绍 成员函数的参数和成员变量重名 this区分 在类的普通成员函数中返回对象本身 this指针介绍 1 this 指针是 C 实现封装的一 种机制 它将对象和该对象调用的成员函数连接在一起 在外部看来 每一个对象
  • jar包classes文件进阶版替换

    我相信大家在做项目的时候有时候看源码 或者想改源码代码的时候 一定是修改不了滴 今天教大家一个进阶版的修改jar源码包的方式 80 的人不知道怎么处理 因为通过解压方式 java zcvf 方式会导致清单文件不存在 从而缺少信息而不能打包
  • 全概率公式习题

    简单的记录下关于全概率公式的习题 我们可以先看下抓阄不分先后的一个例子 设袋中装有10个阄 其中8个是白阄 2个是有物之阄 甲 乙二人依次抓取一个 求没人抓得有物之阄的概率 设A B分别为甲 乙抓得有物之阄的事件 显然P A 2 10 下面
  • 【Git】OpenSSL SSL_read: Connection was aborted, errno 10053

    OpenSSL SSL read Connection was aborted errno 10053报错 解决办法 1 Git默认限制推送的大小 运行命令更改限制大小即可 增加缓冲 git config global http postB
  • 用axure给按钮图片等添加点击事件跳转页面

    由于公司产品离职 只能自己做了 汗 整体过程挺好理解的 拖拽一个图片 双击能设置背景图片 然后选中按钮 并双击OnClick 2 在弹出的视图中可以修改点击事件的名字 3 由于我这个是在当前页面弹出二级页面 所以点击Current Wind
  • python tk库

    tk库是 Python 的一个图形用户界面 GUI 库 可以用来创建窗口 菜单 按钮 文本输入框等 GUI 元素 可以通过它在 Python 中创建复杂的图形界面 使用 tk库时 需要先导入 tkinter 模块 然后使用 tkinter
  • python与vb可以互换吗_vb和python混合编程

    展开全部 解题思路 把 Python 设计成带命令行参数调用的形式 在 VB6 中借助 IWshRuntimeLibrary WshShell Exec 方法进行命令行参数调用 通过 IWshRuntimeLibrary WshExec S
  • 闲谈开闭原则——基于UI动画框架

    本文继续聊另外一个设计原则 开闭原则 在UI动画框架中 开闭原则在 动画策略 和 移动算法 这两个类体系中均有所体现 照旧 先看一下开闭原则的定义 1 开闭原则 一个软件实体如类 模块和函数应该对扩展开放 对修改关闭 有人说过 唯一不变的就
  • No artifacts marked for deployment 解决方法(ideaweb项目配置tomcat步骤)

    No artifacts marked for deployment 出现这种情况的原因 创建新项目的时候要先添加freework support 步骤如下 添加完成后点击添加tomcat的位置 有main的情况也不影响 接下来按下面步骤就
  • 【airtest架构】pytest+pocoui+airtest+allure 完成安卓UI自动化框架

    一 背景 为了做app的自动化 由于app元素定位麻烦或者定位不稳定 又或者使用驱动版本等原因 不想使用启动appnium服务的方式 本文采用网易的airtest框架图像识别作为基础 配合pytest进行简单的二次开发形成一套对安卓app
  • 操作系统内存管理4.21

    离散内存管理方案 为了提高内存的利用率 缺点 访问效率下降 分页式内存管理方案 现代操作系统常用方案 分段式内存管理方案 段页式内存管理方案
  • 【Vue】/deep/、>>>、v::deep 三种深度选择器

    在 Vue项目中 当一个组件使用了 scoped 特性时 组件内的样式只会应用于组件自身 但是有时候我们需要在 父组件中改变子组件中的样式 这时就需要用到深度选择器 一 deep 二 gt gt gt search input gt gt
  • uni-app 使用Weex/nvue的注意事项

    介绍 uni app App端内置了一个基于 weex 改进的原生渲染引擎 提供了原生渲染能力 在App端 如果使用vue页面 则使用webview渲染 如果使用nvue页面 native vue的缩写 则使用原生渲染 一个App中可以同时
  • java 日历 获取月份_使用Java日历获取月份和年份的星期

    要使用Calendar类 请导入以下程序包 import java util Calendar 创建一个Calendar类对象 Calendar cal Calendar getInstance 现在 使用以下字段获取月份和年份的星期 Ca
  • 浅析:Spring框架中IOC容器和Bean的配置

    一 IOC和DI的解释 1 IOC Inversion of Control 反转控制 在应用程序中的组件需要获取资源时 传统的方式是组件主动的从容器中获取所需要的资源 在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式 增加