原创 Spring源碼解析之從單例緩存中獲取單例bean(2)
代碼分析入口: Object sharedInstance = getSingleton(beanName); if (sharedInstance != null && args == null) { if
原创 JVM 垃圾回收GC
一、如何判斷對象是垃圾對象 1.引用計數法 在對象中添加一個引用計數器,當有地方引用這個對象的時候,引用計數器的值+1,失效則-1。但是兩個相互引用的對象有可能無法回收。 private Object
原创 Spring源碼解析之加載bean實例(1)
Spring的整個流程主要分爲兩個階段:容器初始化階段和加載bean階段。 容器初始化階段:首先通過加載Configuration,然後容器會對加載的Configuration進行解析和分析,並將分析的信息組裝成BeanD
原创 Spring源碼解析之從處理依賴depends-on(3)
這篇文章分析的代碼: if (isPrototypeCurrentlyInCreation(beanName)) { throw new BeanCurrentlyInCreationException(
原创 Spring源碼解析之分析各 scope的bean創建(4)
在 Spring 中存在着不同的 scope,默認是 singleton,還有prototype等。下面便分析各個scope。 1.singleton。 if (mbd.isSingleton()) { sharedInstan
原创 redis設計與實現(二):訂閱與事務
1. 發佈與訂閱功能 頻道訂閱與發佈 訂閱頻道 Redis創建了訂閱字典結構來保存頻道和訂閱客戶端之間的關係。字典的鍵則是被訂閱的頻道,值則是一個鏈表結構,存儲訂閱該頻道的客戶端
原创 redis設計與實現(一)
一:redis的數據庫 服務器中的數據庫 1.int dbnum:決定了服務器數據庫的數量,這個數量在初始化服務器的時候決定。默認情況這個值爲16。 切換數據庫 1.redis的客戶端都有自己的目標數據庫,
原创 假裝讀源碼Mybatis(一):緩存原理
Mybatis作爲一個強大的ORM框架,也提供了數據的緩存功能,緩存的架構分爲兩層:一級緩存和二級緩存。 一級緩存是會話級別的緩存,當SqlSessionFactory創建一個SqlSession對象時,就表示開啓了一
原创 Springmvc假裝讀源碼:創建容器
一:創建業務容器 ContextLoaderListener配置在web.xml中,主要是爲了創建springmvc中的容器。在springmvc項目啓動時需要啓動創建一個容器,加載各種組件。那麼ContextLoader
原创 Springmvc假裝讀源碼:DispatcherServlet類解析
DispatcherServlet的類圖 DispatcherServlet的父類和實現的類還是比較複雜的。其中主要的類有HttpServlet、HttpServletBean類。這些類的作用就不過多的講解了。
原创 Spring源碼解析之循環依賴處理(5)
什麼是循環依賴? 循環依賴其實就是兩個或者兩個以上的bean,互相引用對方,形成閉環,如A--->B,B--->C,C--->A。這樣的依賴就是循環依賴。而循環依賴在正常的情況下就是一個死循環,A的初始化爲引起B的初始化,B的初始
原创 Spring源碼解析之分析各 scope的bean創建
在 Spring 中存在着不同的 scope,默認是 singleton,還有prototype等。下面便分析各個scope。 1.singleton。 if (mbd.isSingleton()) { sharedInstan
原创 Spring源碼解析之從單例緩存中獲取單例bean
代碼分析入口: Object sharedInstance = getSingleton(beanName); if (sharedInstance != null && args == null) { if
原创 Spring源碼解析之從處理依賴depends-on
這篇文章分析的代碼: if (isPrototypeCurrentlyInCreation(beanName)) { throw new BeanCurrentlyInCreationException(
原创 Spring源碼解析之加載bean
一、初始化階段 ClassPathResource res = new ClassPathResource("spring/spring.xml"); //獲取創建bean的beanFactory DefaultListableBean