原创 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