【深入Spring】——Tiny Spring IoC(一)Bean
引言
小賈推薦了一個Tiny Spring給我,學習Spring原始碼,從簡單的瞭解Bean,BeanDefinition和BeanFactory三者關
系開始,簡單易懂,這裡也以部落格的形式分享給大家。
UML圖
這裡最關鍵的兩個類:BeanDefinition與BeanFactory(為了簡單,這裡的BeanFactory為類),類圖關係如下:
寫了兩個測試類:HelloWorldService與BeanFactoryTest,時序圖如下:
由時序圖可知,BeanFactory管理Bean的注入與獲取,Bean的注入是由BeanDefinition的建構函式進行的,所以基
本的邏輯就很清晰了。下邊看程式碼部分:
BeanDefinition
package us.codecraft.tinyioc; /** * @author [email protected] */ public class BeanDefinition { private Object bean; public BeanDefinition(Object bean) { this.bean = bean; } public Object getBean() { return bean; } }
BeanFactory
package us.codecraft.tinyioc; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @author [email protected] */ public class BeanFactory { private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(); public Object getBean(String name) { return beanDefinitionMap.get(name).getBean(); } public void registerBeanDefinition(String name, BeanDefinition beanDefinition) { beanDefinitionMap.put(name, beanDefinition); } }
HelloWorldService
package us.codecraft.tinyioc;
/**
* @author [email protected]
*/
public class HelloWorldService {
public void helloWorld(){
System.out.println("Hello World!");
}
}
BeanFactoryTest
package us.codecraft.tinyioc;
import org.junit.Test;
/**
* @author [email protected]
*/
public class BeanFactoryTest {
@Test
public void test() {
// 1.初始化beanfactory
BeanFactory beanFactory = new BeanFactory();
// 2.注入bean
BeanDefinition beanDefinition = new BeanDefinition(new HelloWorldService());
beanFactory.registerBeanDefinition("helloWorldService", beanDefinition);
// 3.獲取bean
HelloWorldService helloWorldService = (HelloWorldService) beanFactory.getBean("helloWorldService");
helloWorldService.helloWorld();
}
}
總結
這是最簡單的demo來理解Bean、BeanDefinition與BeanFactory三者關係,稍後會陸續在此基礎上豐富內容,從而
理解Spring原始碼部分。期待吧~
相關推薦
【深入Spring】——Tiny Spring IoC(一)Bean
引言 小賈推薦了一個Tiny Spring給我,學習Spring原始碼,從簡單的瞭解Bean,BeanDefinition和BeanFactory三者關 系開始,簡單易懂,這裡也以部落格的形
【Cloud Foundry】Could Foundry學習(一)——Could Foundry淺談
art lock mod out isp ted 組成 .com pop 在閱讀的過程中有不論什麽問題。歡迎一起交流 郵箱:[email protected]/* */ QQ:1494713801 Cloud Foundry是VMware
【筆記篇】斜率優化dp(一) HNOI2008玩具裝箱
公式 現在 getchar() 就是 clu cst 差距 直接 source 斜率優化dp 本來想直接肝這玩意的結果還是被忽悠著做了兩道數論現在整天渾渾噩噩無心學習甚至都不是太想頹廢是不是藥丸的表現各位要知道我就是故意要打刪除線並不是因為排版錯亂反正就是一個del標簽嘛
【SSH框架】之Struts2系列(一)
核心 mapping 調度 fault code 組件 -i -c params 微信公眾號:compassblog 歡迎關註、轉發,互相學習,共同進步! 有任何問題,請後臺留言聯系 1、Struts2框架概述 (1)、什麽是Struts2 Struts2是一種基於M
【小說連載】網絡紅顏(一):當你遇到一個不收錢的出租車司機
網絡 美女 職場 生活 小說 簡介:這是一段描寫網絡工程師生活的故事。故事中沒有英雄,沒有勵誌,也沒有所謂的雞湯文化和狼性文化。有的,或許是一種對技術的執著,對愛情的渴望或者是對名利的一種追求,但又能追求到什麽呢?聲明:本故事所出現的人名,公司名均為虛構,如有雷同恰屬巧合小說將在本站博客和
【AI實戰】快速掌握Tensorflow(一):基本操作
Tensorflow是Google開源的深度學習框架,來自於Google Brain研究專案,在Google第一代分散式機器學習框架DistBelief的基礎上發展起來。Tensorflow於2015年11月在GitHub上開源,在2016年4月補充了分散式版本,最新版本為1.10,2018年
【nyoj-127】星際之門(一)(Cayley公式 / Prufer序列)
星際之門(一) 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述 公元3000年,子虛帝國統領著N個星系,原先它們是靠近光束飛船來進行旅行的,近來,X博士發明了星際之門,它利用蟲洞技術,一條蟲洞可以連通任意的兩
【面試演算法】——二叉樹(一)
一、二叉樹問題概述 二叉樹型別的題目為常考題型 原因: 能夠結合佇列、棧、連結串列、字串等多資料結構 需要掌握圖的基本遍歷方法,比如BFS和DFS 需要掌握遞迴函式的使用,並自己設計出遞迴過程 二叉樹問題與實際工作結合緊密 二、二叉樹先序
【機房重構】——增刪改查(一)
【增】 UI層 Entity.UserInfo user = new Entity.UserInfo(); user.UserID = txtUserID.Text.Trim(); Facade.StuFacade facade = new Facade.Stu
【設計模式】HeadFirst設計模式(一):策略(Strategy)模式
1、概述 在軟體開發的過程中,實現一個功能可能會使用很多種演算法,一種比較常用的做法是把這些演算法或者策略寫在一個類中,一個演算法寫一個方法。當我們需要新增一個演算法的時候,我們需要修改封裝這些演算法
【知識總結】多項式全家桶(一)(NTT、加減乘除和求逆)
我這種數學一竅不通的菜雞終於開始學多項式全家桶了…… 必須要會的前置技能:FFT(不會?戳我:【知識總結】快速傅立葉變換(FFT)) 一、NTT 跟FFT功能差不多,只是把複數域變成了模域(計算複數係數多項式相乘變成計算在模意義下整數係數多項式相乘)。你看FFT裡的單位圓是迴圈的,模一個質數也是迴圈的嘛
【pySpark教程】Introduction & 預備工作(一)
windows 下安裝 Python Spark 虛擬環境 在本系列課程中,我們會學習如下內容: Data Management Semi-Structed Data Structured Data 實驗二:使用 Spark 分析網路伺服器日誌
【Unity程式設計】Unity動畫系統(一)
Unity動畫系統 Unity動畫系統,也稱為“Mecanim”,提供了以下功能: 簡單的工作流程,設定動畫的所有元素,包括物件,角色和屬性。 支援匯入外部建立的動畫片段和使用內建動畫編輯器製作的動畫片段。 人型動畫重新定位,動畫角色的運動控制可以被所有的
【Dubbo實戰】基礎學習篇(一)
Dubbo的簡介是什麼?Dubbo是阿里巴巴SOA服務化治理方案的核心框架,每天為2,000多個服務提供30多億次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點。Dubbo是一個分散式服務框架,致力
【計算機網路】資料鏈路層(一):資料幀和物理定址
資料鏈路層是物理層的上層,物理層是把電腦連線起來的物理手段,它主要規定了網路的一些電氣屬性,其作用是負責傳送0和1的電訊號。資料鏈路層位於物理層的上層,簡單的闡述它的作用就是確定0和1的分組方式。 下
【整理自用】清奇思路(一)NIM遊戲、(一堆石頭,最後一個勝利)
NIM遊戲類似 一共有N堆石子,編號1..n,第i堆中有個a[i]個石子。每一次操作Alice和Bob可以從任意一堆石子中取出任意數量的石子,至少取一顆,至多取出這一堆剩下的所有石子。兩個人輪流行動,取走最後一個的人勝利。Alice為先手。 招
Spring的學習之路(一)Bean
序言 配置和使用Bean 在這裡我在本地建立了一個簡單的Web專案,Web 專案下有兩個類Student和Address類,驗證一下看看Spring如何管理Bean。 Student類 Address類 配置xml resources
【程式人生】回憶職業生涯(一)選擇職業時的“圖樣圖森破”
做Android開發已經快7年了,不知不覺從意氣風發的青蔥少年走向了危機重重的中年。閒暇下來時,或者遇到一些事情時,總愛回首往事,回首這7年來的職業生涯,尤其是最近兩年華為開啟“殺老”模式,最近半年的一波接一波的裁員潮,以及上半年鬧
【深入Spring】——Tiny Spring IoC(二)BeanClass
引言 上篇部落格講到的是Spring裡的基礎Bean,BeanDefinition與BeanFactory三者之間的簡單關係,這裡主要在此基礎 上新增BeanClass的內容,這裡順便提一個
【Java】 Spring 框架初步學習總結(一)簡單實現 IoC 和 AOP
1.0 其中 表示 只需要 第一篇 否則 info fin pojo Spring 是一個開源的設計層面的輕量級框架,Spring 的好處網上有太多,這裏就不在贅述。 IoC 控制反轉和 AOP 面向切面編程是 Spring 的兩個重要特性。 IoC(Inver