原创 SpringBoot中的spi機制(2): 實現原理
文章目錄1 @EnableAutoConfiguration2 @Import(AutoConfigurationImportSelector.class)3 AutoConfigurationImportSelector3.1
原创 自定義一個Starter
git地址 自定義starter
原创 Spring中的spi機制(1): 一個Demo瞭解什麼是spi
什麼是spi機制 英文是service provider interface,就是一種拓展點,服務發現的機制。 比如,Spring框架有個接口,框架已經提供三個實現,但是不滿足我的需求,我想寫一個自己的實現,被spring加載,
原创 JVM內存管理(一):內存劃分
JVM內存的引入 當xx.java被編譯成字節碼文件(xx.class)文件的時候,通過類加載機制將其加載到內存中,而字節碼文件裏會包含類的信息、常量、靜態變量、方法等信息,這些信息如何分類放入到JVM,放入到JVM什麼地方?這就
原创 JVM內存管理(二):垃圾判定以及垃圾回收算法
1 如何判斷一個對象是否是垃圾 1.1 引用計數法 如果一個對象被別的地方引用一次就計數+1、否則-1,等於0的時候代表沒有任何引用,可以視爲是垃圾,可以被GC。 缺點 就是一個循環引用的問題,比如對象A和對象B相互引用,但是A沒
原创 Spring如何解決循環依賴問題
什麼是循環依賴? 比如A依賴B,而B又依賴A,當實例化A的時候,要實例化B,B又依賴A。然而A沒有實例化完成,所以就陷入了死循環, Spring是如何解決循環依賴的問題呢? 源碼解讀 在AbstractApplicatio
原创 Mybatis源碼解讀
Mybatis源碼解讀 入口 @Test public void testSelect() throws IOException { String resource = "mybatis-config.xm
原创 ReentrantLock和AbstractQueuedSynchronizer源碼解讀
ReentrantLock lock = new ReentrantLock(); lock.lock(); lock.unlock(); 首先解釋幾個成員變量: 抽象類AbstractQueuedSynchronizer中: 內部
原创 ArrayBlockingQueue源碼分析
ArrayBlockingQueue是阻塞隊列,FIFO先進先出。 阻塞隊列api: 插入: add(e): 添加元素到隊列中,如果隊列滿了,繼續插入元素會報錯,IllegalStateException。 offer(e): 添加
原创 Spring Bean的生命週期
什麼是Spring Bean的生命週期? 在一個 bean 實例被初始化時,需要執行一系列的初始化操作以達到可用的狀態。同樣的,當一個 bean 不在被調用時需要進行相關的銷燬 操作,並從 bean 容器中移除。 下面正
原创 爲何自定義線程工廠(ThreadFactory)
JDK創建線程池如果沒有指定線程工廠則會使用了默認的線程工廠(DefaultThreadFactory) 既然有默認工廠,爲啥還要自定義線程工廠呢?原因如下: 1.可以設置有意見的線程名,這樣方便我們開發調試,問題日誌查找及定位。 2.可
原创 觀察者模式實際應用場景-----Spring事件機制
以下僞代碼是一個保存訂單的功能,並會發送短信消息: /** * Author heling on 2019/1/9 */ @Service public class OrderServiceImpl implements OrderSe
原创 JDK8新特性--------Lambda表達式
demo: 1.遍歷 /** * JDK8新特性1:Lambda表達式 * @param args */ public static void main(String[] args) {
原创 設計模式:六大原則
一、單一職責原則 意思是每個類都只負責單一的功能,切不可太多,並且一個類應當儘量的把一個功能做到極致。 違背該原則代碼示例: package com.whl.sixPrinciple; import java.io.*; /**
原创 JDK8源碼閱讀筆記--------java.util.ArrayList
官方文檔: 該類實現list接口,屬於collections,是一個動態數組,可以存放任何元素包括null,初始容量爲10,添加元素時候容量可以自動增長。該類不是同步的,也就是說不是線程安全的。如果多個線程同時方位一個實例,並且其中一個修