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.pswp.cn/news/537822.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537822.shtml
英文地址,請注明出處:http://en.pswp.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