學習寫簡單Spring原始碼demo

2022-07-25 08:06:06 字數 1258 閱讀 8510

最近在研究怎麼實現簡單的spring的原始碼,通過註解的方式來實現對bean的載入管理。

首先先來看下我的工程結構:

(1)spring-common:定義了常用的列舉常量,工具類(如fileutils提供了遞迴找到某個目錄下所有檔案的具體實現)

(2)spring-frame:是整個框架的具體實現,依賴spring-common

(3)spring-test:提供了乙個簡單的測試demo

我們先看測試類,這個應該更熟悉,簡單得到bean例項的**:

public

static

void

main(string args)

public

//spring啟動要做什麼事情?

//掃瞄類 --> 建立非懶載入的單例的bean --> 放入單例池

//1. 單純掃瞄包

listclasslist =scanspecifiedpath(configclass);

//2. 解析出檔案中的bean

initialbeandefinition(classlist);

//3. 例項化單例的bean

instantiatesingletonbean();

}

再上述看到的三個方法中,主要是使用了我們自己定義的@componentscan, @component, @scope, @autowired註解來實現bean的掃瞄,識別,是否單例,依賴注入;

針對bean的初始化和後置處理,我們定義了同spring原生的介面:initializingbean,beanpostprocessor來實現。

其中,我們特意構造了getbean的方法,核心**如下:

public

object getbean(string beanname)

else

if(objects.equals(beandefinition.getscope(), baseconstant.scope.singleton))

return

obj;

}return

null

;}

可以簡單看到,針對scope為原型的bean,直接建立了乙個bean的例項;單例模式的bean會先從單例池中直接獲取,否則才會建立之後再加入單例池。

Spring原始碼學習

a spring 初始化的時候首先要執行的類為 org.springframework.web.context.contextloaderlistener 或 org.springframework.web.context.contextloaderservlet 接下來看一下在這個方法裡幹了寫什麼...

spring 原始碼學習

springioc 學習 1 依賴查詢 2 依賴注入 spring實現ioc的思路是提供一些配置資訊用來描述類之間的依賴關係,然後由容器去解析這些配置資訊,繼而維護好物件之間的依賴關係,前提是物件之間的依賴關係必須在類中定義好 spring依賴注入的方法 構造方法和setter方法 3 類載入模式 ...

spring原始碼學習

1.beandefinitionregistry是儲存bean定義資訊的介面 2.例項化beanfactorypostprocessor,3.初始化工廠 4.迴圈呼叫beanfactorypostprocessor.postprocessbeanfactory 5.例項化beanpostproces...