Spring IOC实现原理

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

192322_lVRV_3847203.png

1、BeanDefinition 对依赖翻转模式中管理对象依赖关系的数据抽象

  • 实现依赖翻转功能的核心数据结构
  • 依赖翻转功能都是围绕对BeanDefinition 处理完成的
  • 有了这些BeanDefinition 基础数据结构,容器才能发挥作用

2、BeanFactory 定义了IOC 容器的基本功能规范

  • IOC容器最基本形式
  • 遵守的基本契约
  • 最底层最基本编程规范
  • 仅仅是一个接口

DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等都是附加了某种功能的具体实现

  • DefaultListableBeanFactory 包含了ioc 的重要功能(容器系列中的一个基本产品)

3、FactoryBean 和BeanFactory

  • 前者是一个Bean
  • 后者是IOC 容器(对象工厂),一个Factory

4、XmlBeanFactory原理

  • 提供了最基本的ioc 容器的功能
  • 读取XML 形式 BeanDefinition 的ioc 容器
  • XMLDefinitionReader 处理xml 形式的BeanDefinition
  • 信息来源有 Resource类来给出
  • Resource 类是封装io操作的类
  • loadBeanDefinitions 方法:ioc 容器初始化重要方法

195226_mY3w_3847203.png

 

193552_b1or_3847203.png

5、BeanFactory 和ApplicationContext

  • BeanFactory 实现是ioc 容器基本形式
  • ApplicationContext 是高级形式(具有增强特性)

6、ioc 容器初始化

  • BeanDefinition 的Resource 定位、载入和注册
  • 这三个过程使用不同模块完成

BeanDefinition  的资源定位 由ResourceLoader 通过统一形式Resource接口完成

  • BeanDefinition  存在形式:FileSystemResource、ClassPathResource等

BeanDefinition 载入:把用户定义好的Bean 表示成ioc 容器的数据结构,即BeanDefinition

  • pojo对象在ioc 容器内部的抽象

BeanDefinition  注册:BeanDefinitionRegistry 接口的实现类来完成的

  • ioc 容器内部是通过一个HashMap 持有这些对象的

ioc 容器初始化和上下文初始化一般不包括依赖注入

  • lazyInit属性,会在第一次getBean 时注入

 

转载于:https://my.oschina.net/u/3847203/blog/2208476

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux3.0 nand分区,OK6410(256MRAM2Gnandflash) Linux3.0.1内核移植

这里我主要移植的是增加yaffs2文件系统支持,修改和移植nand驱动。1.不知道为什么我这yaffs2的补丁打上了就没发现过编译错误,相当顺利啊 呵呵。附上补丁地址-----------------------------------点击打开链接修改补丁里patch‐ker.sh 文件。屏蔽下面这段…

authentication plugin caching_sha2

新电脑安装最新版本的Mysql,用Navicat Premium连接,提示:authentication plugin caching_sha2 因为mysql8.0开始更新了验证方式,Navicat Premium版本连接新MySQL的时候,还是上一个版本的认证方式。 不仅Navicat Prem…

openlayers入门开发系列之图层控制

本篇的重点内容是利用openlayers实现地图图层控制功能,效果图如下: 部分核心代码如下:页面引用ztree插件图层管理器界面布局图层管理器初始化jsLayerSwitcher类定义详细的实现过程见:这里

linux df命令无反馈,Linux-df命令

df命令:说明:df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息参数:-a或--all:包含全部的文件系统;--block-size&…

windows版本的redis

redis官网是不提供windows版本的。 微软的github上有windows版本下载,不会是redis的最新版本,是基于redis稳定版本制作的。 redis官网关于文档版本的说明: Redis uses a standard practice for its versioning: major.minor.patchlevel. A…

一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate

一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) Predicate为jdk1.8新增接口,由…

linux选择运行的核数量,linux – 如何根据可用内核的数量选择最大负载阈值?

负载在Linux上经常被误解.在Linux上,它是运行或不间断睡眠状态中所有任务的度量.请注意,这是任务,而不是进程.线程包含在此值中.内核每五秒计算一次加载,并且是一个加权平均值.这是微小负载是平均5/60,五分钟5/300和十五分之五.一般来说,作为一个纯数字的负载在没有参考点的情况…

使用nginx代理,怎么获取真实的IP

1.在nginx.conf配置中加入配置信息 proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; 2.然后…

英语发音规则---S字母

英语发音规则---S字母 一、总结 一句话总结: 1、S 在音节开头或清辅音前 /s/? sit /sɪt/ vt.& vi.坐seat /si:t/ n.席位sell /sel/ vt.& vi.卖,售sold /səʊld/ v.卖,售sleep /sli:p/ vi.睡slow /sləʊ/ adj.慢的skate…

Mysql windows 安装提示MSVCR120.dll文件丢失

电脑上已经按照了vc运行库,但是报错。 原因:文件被恶意程序破坏了 解决方法:到微软官网下载 VC redist packages for x64。点击跳转 vcredist_x64.exe 如果是32位,则选vcredist_x32.exe 安装完后会提示重启电脑,不…

catcti监控linux主机,CentOS7搭建Prometheus 监控Linux主机

简介prometheus可以拆分成多个节点进行指标收集。安装prometheuswget -c https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gztar zxvf prometheus-2.23.0.linux-amd64.tar.gz -C /opt/cd /opt/ln -s prometheus-2.23.…

自己动手实现一个html2canvas

前言 昨天写了新手引导动画的4种实现方式, 里面用到了 html2canvas 于是就顺便了解了一下实现思路. 大概就是 利用 svg 的 foreignObject 标签, 嵌入 dom, 最后再利用 canvas 绘制 svg. 从而实现最终目的. 先让大家看看效果 MDN示例 var canvas document.getElementById(canva…

Git fetch pull 详解

1、简单概括 先用一张图来理一下git fetch和git pull的概念: 可以简单的概括为: git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。 而git pull 则是将远程主机的最新内容拉下来后直接合并&#x…

linux 安装redis2.8.3,Linux及Windows安装Redis(详细)

标签:Linux及Windows安装Redis1.Windows安装教程1.1下载https://github.com/MSOpenTech/redis/releases进入github里下载redis Windows版压缩包将我们下载好的文件放进新建的一个Redis文件夹(我在C盘创建了一个redis的文件夹)1.2启动服务打开我们Windows版的dos命令…

Git 少用 Pull 多用 Fetch 和 Merge

转自:http://www.oschina.net/translate/git-fetch-and-merge --------------------------------------------------------------------------------- 本文有点长而且有点乱,但就像Mark Twain Blaise Pascal的笑话里说的那样:我没有时间让…

IDEA生成可运行jar包

方式1: maven打包 maven 包中添加如下配置 <build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptorRefs><descriptorRef&…

linux packet socket,linux Packet socket (1)简单介绍

本文主要来自于linux自带的man packet手冊&#xff1a;http://man7.org/linux/man-pages/man7/packet.7.html平时常常使用的INET套接字提供的是7层的抓包能力&#xff0c;抓上来的data直接就是tcp或者udp的payload&#xff0c;无需关心L3和L4的头部信息。Packet套接字提供的是L…

TortoiseGit 修改密码

当TortoiseGi默认设置了凭证助手为“管理器-所有windows用户”&#xff0c;每次向远程git推送时&#xff0c;都会去windows的凭证管理器里读取值&#xff0c;然后推送。 如果密码修改了&#xff0c;或者密码不小心输入错了&#xff0c;每次提交都会报错&#xff1a;HTTP Basic:…

linux系统常见操作,Linux系统基本操作

我们可以认为Linux是一套自由使用的类Unix操作系统&#xff0c;与Windows相比较而言&#xff0c;Linux具有安全、开源、稳定等特点。下面我来介绍Linux中一些的登录登出基本操作。1. 启动系统通常LILO是安装在MBR上的&#xff0c;计算机启动后&#xff0c;MBR上的程序被执行&am…

字符串常见处理

mystr hello world itcast and itcastcpps mystr.find(hello)print(s)ind mystr.index(world)print(ind)cou mystr.count(c)print(cou)rep mystr.replace(c,)print(rep)spl mystr.split( )print(spl)转载于:https://www.cnblogs.com/zxt-cn/p/9714841.html