原创 Spring源碼解讀『Bean擴展接口』

上篇文章我們介紹了Spring Bean的初始化流程,在最後我們提到在通過populateBean方法調用後,調用了initializeBean方法,實現了一些列例如BeanNameAware、BeanPostProcessor等擴展接口

原创 Java編程拾遺『JVM垃圾回收』

垃圾收集(Garbage Collection)通常被稱爲GC,大部分人都把這項技術當作Java語言的伴生產物。事實上,GC的歷史遠遠比Java久遠,1960年誕生於MIT的Lisp語言是第一門真正使用內存動態分配和垃圾收集技術的語言。經

原创 使用Netty實現RPC

Netty作爲一個異步事件驅動的網絡應用框架,可以用於快速開發可維護的高性能服務器和客戶端。國內著名的RPC框架Dubbo底層使用的是Netty作爲網絡通信的。本篇文章我們來探索一下RPC框架的本質以及使用Netty來實現一個簡單地RPC

原创 Spring源碼解讀『IOC容器2-Bean加載過程』

上篇文章,我們自定義實現了一個簡單地IOC容器。本篇文章我們來介紹一下Spring IOC容器的實現。 1. 準備工作 爲了學習Spring的源碼實現,我們需要準備Spring的源碼環境,這時我們一般可以有以下兩種選擇: 1.1 下載sp

原创 Spring源碼解讀『Spring Bean循環依賴』

由於Spring的IOC特性,Bean都是由Spring容器生成的,那麼如果Bean是單例的,存在兩個Bean,分別爲beanA、beanB,beanA依賴beanB,同時beanB也依賴beanA,那麼可以想象假如容器不做特殊處理的話,

原创 使用Netty實現HTTPS

之前的文章理解Https中,介紹了HTTP到HTTPS的演進過程,我們也可以得到一個結論:HTTPS = HTTP + 加密 + 身份認證 + 報文正確性保障。其實也就是在HTTP層和TCP層之間新增一個步驟,通過證書交換通信祕鑰並驗證客

原创 Netty基礎組件

之前的文章Netty基礎篇:Netty是什麼?介紹了傳統IO編程存在的問題,及Java NIO編程在解決IO編程的問題中的侷限性,由此引出IO編程問題的理想解決方案——Netty。在上篇文章中簡單展示了Netty的基本使用,本篇文章通過一

原创 Spring源碼解讀『IOC容器3-Bean初始化』

上篇文章我們介紹了Spring源碼閱讀的入口,分析了通過xml配置文件到Spring Bean初始化出來的流程。在上篇文章中,我們講到,所有非懶加載的bean都是在finishBeanFactoryInitialization方法中完成實

原创 Spring源碼解讀『IOC容器1-自定義實現IOC容器』

上篇文章介紹了Spring的相關基礎概念,我們瞭解到Spring Framework提供的兩個基礎功能就是IOC和AOP。關於IOC容器我們分爲兩篇文章來介紹,本篇文章會介紹IOC容器的基礎概念,並自定義實現一個基礎的IOC容器,幫助我們

原创 Spring源碼解讀『基本概念』

Spring作爲一個優秀的開源框架,作爲一名服務端開發人員,在工作中必然是每天都要接觸的,相信每個人也都能熟練地使用Spring來完成日常工作。毫不誇張的講,Spring很大程度上改變了Java開發的方式。但是在工作中,我發現很多數人對S

原创 Java編程拾遺『序列化』

Java平臺允許我們在內存中創建可複用的Java對象,但一般情況下,只有當JVM處於運行時,這些對象纔可能存在,也就是講這些對象的生命週期不會比JVM的生命週期更長。但在現實應用中,有可能要求在JVM停止運行之後能夠保存(持久化)指定的對

原创 Java編程拾遺『JVM內存區域』

作爲一名Java開發人員,JVM是我們每天都會打交道的對象。但是由於JVM處於知識體系的底層,同時工作中有可能接觸的機會不是很多,導致很多人都對JVM相關的知識一知半解。一般只會在面試的時候,纔來準備這部分內容。但JVM是爲了讓我們更好的

原创 Java編程拾遺『字節流』

上篇文章中簡單介紹了文件和Java IO的概念,我們瞭解到Java中文件是作爲一種特殊的IO設備處理的,並且Java中處理IO是通過流來操作的,流又可以細分爲字節流和字符流。本篇文章就重點介紹一下Java IO中的一個重要模塊——字節流。

原创 Java編程拾遺『ThreadLocal』

本篇文章,我們來介紹一下,Java多線程編程中一個比較常用的工具,線程本地變量——ThreadLocal。ThreadLocal簡單的來講,就是每個線程都有同一個成員變量的獨有拷貝。由於每個線程都有成員變量獨立的拷貝,所以不存在多線程訪問

原创 Java編程拾遺『文件和IO概述』

從本文開始,講述Java中文件和IO的相關知識。在做企業web開發時,文件操作相對涉及的比較少,在桌面系統開發中比較常見。正因如此,導致很多人對文本文件、二進制文件、字節流、字符流等概念性的東西都不能完全搞清楚。其實在我在寫這篇文章之前,